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