我是glm
的新手,正在尝试使用pyqt5gui中的glm.project()
方法将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)
我对此感到非常沮丧
有人能帮我这个代码有什么问题吗?我能在这里做些什么
glm.project()
分别采用4个参数vec3()、mat4()、mat4()和vec4()但是在上面的场景中,第二个和第三个参数不是mat4()的类型,所以这些参数必须转换成mat4()
可以通过将多维数据集['model']中的元素和其他元素逐个复制到4 vec4()变量部分中的mat4()变量,然后将该mat4()变量传递给glm.project()来完成
相关问题 更多 >
编程相关推荐