from OpenGL.extensions import alternate
from OpenGL.GL import *
from OpenGL.GL.ARB.multitexture import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
class TestTexture():
def __init__(self):
self.window_width = 800
self.window_height = 800
def init(self):
glClearColor(0.0, 0.0, 0.0, 0.0)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
glEnable(GL_TEXTURE_2D)
def display(self):
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glLoadIdentity()
glBegin(GL_TRIANGLES)
glVertex3f(-1.0, 0.0, 0.0)
glVertex3f(1.0, 0.0, 0.0)
glVertex3f(0.0, 1.0, 0.0)
glEnd()
glFlush()
glutSwapBuffers()
def reshape(self, w, h):
self.window_width = w
self.window_height = h
glViewport(0, 0, self.window_width, self.window_height)
def animate(self):
glutPostRedisplay()
def visible(self, vis):
if (vis == GLUT_VISIBLE):
glutIdleFunc(self.animate)
else:
glutIdleFunc(0)
def key_pressed(self, *args):
if args[0] == b"\x1b":
sys.exit()
def run(self):
glutInit(sys.argv)
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH)
glutInitWindowSize(self.window_width, self.window_height)
glutInitWindowPosition(800, 100)
glutCreateWindow(b'MCVE')
glutDisplayFunc(self.display)
glutReshapeFunc(self.reshape)
glutIdleFunc(self.animate)
glutVisibilityFunc(self.visible)
glutKeyboardFunc(self.key_pressed)
self.init()
glutMainLoop()
if __name__ == "__main__":
TestTexture().run()
我已经尝试了几件事情,以调整&正确刷新这个窗口,但没有运气到目前为止。当窗口被调整大小时,场景应该被实时正确渲染,但不是,只有当你释放鼠标时才会更新场景(重新调整函数未被调用),或者当它被调整大小时,它有一点更新的机会但最终的结果绝对不是很酷。如何调整GLUT窗口的大小?
值得一提的是,pyqt opengl应用程序正在调整大小,并且启用show window contents while dragging选项。
测试上取得了windows7的,PyOpenGL == 3.1.1和python3.5.1_x86
所以现在的问题是,我该怎么调整&正确刷新过剩窗口实时?
@genpfault编辑问题 – BPL
我在Mac OSX 10.12上运行,并且您的实现在我的计算机上实时调整大小,因此它很可能与您在Windows中的计算机设置有关。您是否在Visual Effects设置中禁用[“显示窗口内容或轮廓拖动”](https://www.sevenforums.com/tutorials/75059-show-window-contents-outline-while-dragging.html) ? –
@JustinTennant很高兴知道它在Mac OSX 10.12上正确调整大小。在windows7上,我启用了“在拖动时显示窗口内容或轮廓” – BPL