Python 3学习笔记(9):PyOpenGL之保持正方形

  • 简介

OpenGL画一个居中的正方形。改变窗口大小时,使用回调函数ChangeSize重新绘制正方形,在glViewportglOrtho函数帮助下,实现正射投影(即不随窗口的纵横比变化,始终显示为正方形。)

glViewport (x,y,width,height) 设置窗口区域

glOrtho (left,right,top,bottom,near,far)设置或修改修剪空间的范围;

  • 代码 

 

#coding:utf-8
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *


def RenderScene():
    #清除之前画面
    glClear(GL_COLOR_BUFFER_BIT)
    glColor3f(1.0,0.0, 0.0)   #不透明,填充颜色红色
    glRectf(100.0, 150.0, 150.0, 100.0)      #画矩形 
    #刷新显示
    glFlush()

#设置渲染状态
def SetupRC():
	glClearColor(0.0, 0.0, 1.0, 1.0)  #背景蓝色

#改变窗口大小时调用
def ChangeSize(w,h):
	if(h == 0):     #防止除数为0
		h = 1
	glViewport(0, 0, w, h)
	glMatrixMode(GL_PROJECTION)
	glLoadIdentity()
	if (w <= h): 
		glOrtho (0.0, 250.0, 0.0, 250.0*h/w, 1.0, -1.0)
	else: 
		glOrtho (0.0, 250.0*w/h, 0.0, 250.0, 1.0, -1.0)
	glMatrixMode(GL_MODELVIEW)
	glLoadIdentity()
	    
#使用glut初始化OpenGL
glutInit()
#显示模式:GLUT_SINGLE无缓冲直接显示|GLUT_RGB采用RGB
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB)
glutCreateWindow(b"GLRect")

#调用函数绘制图像
glutDisplayFunc(RenderScene)
glutReshapeFunc(ChangeSize)
SetupRC()
#主循环
glutMainLoop()

 

你可能感兴趣的:(Python)