【发布时间】:2013-12-01 19:29:30
【问题描述】:
我正在使用 PyQt 和 PyOpenGl,当我尝试翻译/平移时,我在更新 modelview matrix 时遇到了一些问题。绘图/绘画在方法paintGL
def paintGL(self):
"""
display geometry
"""
# Clear the screen
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
# setup camera
glMatrixMode(GL_MODELVIEW)
# drawing here....
翻译/平移在方法mouseMoveEvent中调用
def mouseMoveEvent(self, event):
dx = dxy.x()
dy = dxy.y()
if event.buttons() & Qt.MidButton:
# translate
if event.modifiers() & Qt.ControlModifier:
self.camera.translate(dx, dy, 0)
而Camera 对象的方法translate 是:
class Camera(object):
'''
Connection between mouse motion and transformation matrix
'''
def __init__(self):
self.currentMatrix = []
self.reset()
def reset(self):
glPushMatrix()
glLoadIdentity()
self.currentMatrix = glGetDoublev(GL_MODELVIEW_MATRIX)
glPopMatrix()
def translate(self, x, y, z):
glPushMatrix()
glLoadIdentity()
glTranslatef(tx, ty, tz)
glMultMatrixf( self.currentMatrix )
self.currentMatrix = glGetFloatv( GL_MODELVIEW_MATRIX )
glPopMatrix()
我遇到的问题是modelview matrix 被转换(在翻译时 - 移动鼠标)但在绘制之前modelview matrix 再次等于glLoadIdentity()。如何修改代码解决问题?
【问题讨论】:
标签: python opengl matrix pyqt pyopengl