即使参数的类型正确,glm.project()函数也会显示错误

时间:2019-07-05 11:51:56

标签: python glm

我是glm的新手,我正在尝试使用pyqt5 GUI中的glm.project()方法将3d对象坐标转换为窗口坐标。

这是鼠标按下事件时将3d坐标转换为窗口坐标的代码。

def mousePressEvent(self, event):
        self.makeCurrent()
        objCoord = glm.vec3(-1,-1,1)
        coord = glm.project(objCoord, self.cube['model']*self.cube['view'], self.cube['projection'], glm.vec4(0,0,self.width, self.height))
        self.doneCurrent()
        print(coord)

我正在传递适当的论点。

在这里您可以看到其中使用的参数。

self.cube['model'] = glm.mat4(1)
self.cube['view'] = glm.lookAt(
            glm.vec3(0,0,self.z),
            glm.vec3(0,0,0),
            glm.vec3(0,1,0)
        )
self.cube['projection'] = glm.perspective(glm.radians(45), width / height, 2.0, 100.0)

但显示以下错误的无效参数类型。

Traceback (most recent call last):
  File "openglWidget.py", line 147, in mousePressEvent
    glm.project(objCoord, self.cube['model']*self.cube['view'], self.cube['projection'], glm.vec4(0,0,self.width, self.height))
TypeError: invalid argument type(s) for project()
Aborted (core dumped)

对此我感到非常沮丧。

有人可以帮助我解决此代码的问题吗?我在这里可以做什么?

1 个答案:

答案 0 :(得分:0)

glm.project()分别接受4个参数vec3(),mat4(),mat4()和vec4()。

但是在上述情况下,第二个和第三个参数不是mat4()的类型,因此必须将这些参数转换为mat4()。

可以通过将多维数据集['model']中的其他元素一一复制到4个vec4()变量中的mat4()变量中,然后将该mat4()变量传递到glm.project()来完成。