未使用pyopengl和pyq更新modelview矩阵

2024-10-02 04:29:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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中调用

^{pr2}$

方法为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 matrix被转换(当翻译-移动鼠标时),但是在绘制之前,modelview matrix又等于glLoadIdentity()。如何修改代码以解决问题?在


Tags: 方法selfdefbufferbitmatrixcamerareset
1条回答
网友
1楼 · 发布于 2024-10-02 04:29:36

如果有人会有类似的问题,我在这里张贴的解决方案,使我无法解决问题。在OpenGLWidget类中,我有以下代码(在其余代码中):

class OpenGLWidget(QtOpenGL.QGLWidget):
    def __init__(self, parent=None):
        self.parent = parent
        self.camera = camera_view.View()

因为类视图是在初始化OpenGL之前调用的,它总是将GL_MODELVIEW_MATRIX作为零矩阵返回。 我的解决方案如下:代码:

self.camera = camera_view.View()

移动到初始化OpenGL的方法,即:

^{pr2}$

希望这对任何人都有帮助。在

相关问题 更多 >

    热门问题