我是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)
对此我感到非常沮丧。
有人可以帮助我解决此代码的问题吗?我在这里可以做什么?
答案 0 :(得分:0)
glm.project()
分别接受4个参数vec3(),mat4(),mat4()和vec4()。
但是在上述情况下,第二个和第三个参数不是mat4()的类型,因此必须将这些参数转换为mat4()。
可以通过将多维数据集['model']中的其他元素一一复制到4个vec4()变量中的mat4()变量中,然后将该mat4()变量传递到glm.project()来完成。