Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 未使用pyopengl和pyqt更新modelview矩阵_Python_Opengl_Matrix_Pyqt_Pyopengl - Fatal编程技术网

Python 未使用pyopengl和pyqt更新modelview矩阵

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

我正在使用PyQt和PyOpenGl,当我尝试翻译/平移时,我在更新
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()