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

2024-10-05 12:20:40 发布

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

我是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)

我对此感到非常沮丧

有人能帮我这个代码有什么问题吗?我能在这里做些什么


Tags: 代码selfprojectviewmodelwidthheightcube
1条回答
网友
1楼 · 发布于 2024-10-05 12:20:40

glm.project()分别采用4个参数vec3()、mat4()、mat4()和vec4()

但是在上面的场景中,第二个和第三个参数不是mat4()的类型,所以这些参数必须转换成mat4()

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

相关问题 更多 >

    热门问题