【发布时间】:2017-09-14 15:47:09
【问题描述】:
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()
我已经尝试了一些方法来正确调整和刷新此窗口的大小,但到目前为止还没有运气。调整窗口大小时,应该实时正确渲染场景,但事实并非如此,相反,仅当您释放鼠标(不调用重塑功能)或调整大小时,场景才会更新但最终的结果肯定一点都不酷。
值得一提的是,一个 pyqt opengl 应用正在调整大小并启用了 show window contents while dragging 选项。
已经在windows7、PyOpenGL==3.1.1和python3.5.1_x86上进行了测试
所以问题是,我怎样才能实时正确地调整和刷新过剩窗口?
【问题讨论】:
-
@genpfault 编辑了问题
-
我在 Mac OSX 10.12 上运行,您的实现在我的计算机上实时正确调整大小,因此它可能与您在 Windows 中的计算机设置有关。您是否在视觉效果设置中禁用了"Show window contents or outline while dragging"?
-
@JustinTennant 很高兴知道它在 Mac OSX 10.12 上正确调整大小。在 windows7 上,我启用了“拖动时显示窗口内容或轮廓”
-
尝试在
reshape()末尾调用glutPostRedisplay() -
这里有实际的技术问题吗?还是这只是主要与偏好有关。
标签: python opengl glut pyopengl