Python 未使用pyopengl和pyqt更新modelview矩阵
我正在使用PyQt和PyOpenGl,当我尝试翻译/平移时,我在更新Python 未使用pyopengl和pyqt更新modelview矩阵,python,opengl,matrix,pyqt,pyopengl,Python,Opengl,Matrix,Pyqt,Pyopengl,我正在使用PyQt和PyOpenGl,当我尝试翻译/平移时,我在更新modelview矩阵时遇到了一些问题。绘制/绘制采用方法paintGL def paintGL(self): """ display geometry """ # Clear the screen glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) # setup camer
modelview矩阵时遇到了一些问题。绘制/绘制采用方法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)
方法为translate
的Camera
对象为:
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矩阵
被转换(在平移-移动鼠标时),但在绘制modelview矩阵之前,再次等于glLoadIdentity()
。如何修改代码以解决问题?如果其他人也有类似问题,我将在这里发布阻止我解决问题的解决方案。在类OpenGLWidget
中,我有以下代码(在其他代码中):
因为在初始化OpenGL
之前调用了类视图,它总是将GL\u MODELVIEW\u矩阵作为零矩阵返回。
我的解决方案如下;守则:
self.camera=camera\u view.view()
移动到初始化OpenGL的方法,即:
def initializeGL(self):
# background color
glClearColor(0,0.0,0,1)
glEnable(GL_DEPTH_TEST)
glShadeModel(GL_SMOOTH)
glEnable(GL_NORMALIZE)
glEnable(GL_CULL_FACE)
# lights settings
glEnable( GL_LIGHTING )
glLightModeli( GL_LIGHT_MODEL_TWO_SIDE, 0 )
glEnable( GL_LIGHT0 )
light_pos_0 = np.array([0.0, 10.0, 10.0])
glLightfv( GL_LIGHT0, GL_POSITION, light_pos_0 )
glLightfv( GL_LIGHT0, GL_AMBIENT, [0.8, 0.8, 0.8, 1] )
glLightfv( GL_LIGHT0, GL_DIFFUSE, [1, 1, 1, 0] )
glLightfv( GL_LIGHT0, GL_SPECULAR, [1, 1, 1, 0] )
# camera
self.camera = camera_view.View()
# viewing
self.geometry()
希望这对任何人都有帮助
def initializeGL(self):
# background color
glClearColor(0,0.0,0,1)
glEnable(GL_DEPTH_TEST)
glShadeModel(GL_SMOOTH)
glEnable(GL_NORMALIZE)
glEnable(GL_CULL_FACE)
# lights settings
glEnable( GL_LIGHTING )
glLightModeli( GL_LIGHT_MODEL_TWO_SIDE, 0 )
glEnable( GL_LIGHT0 )
light_pos_0 = np.array([0.0, 10.0, 10.0])
glLightfv( GL_LIGHT0, GL_POSITION, light_pos_0 )
glLightfv( GL_LIGHT0, GL_AMBIENT, [0.8, 0.8, 0.8, 1] )
glLightfv( GL_LIGHT0, GL_DIFFUSE, [1, 1, 1, 0] )
glLightfv( GL_LIGHT0, GL_SPECULAR, [1, 1, 1, 0] )
# camera
self.camera = camera_view.View()
# viewing
self.geometry()