Функция glm.project (), показывающая ошибку, даже если аргументы имеют правильный тип - PullRequest
0 голосов
/ 05 июля 2019

Я новичок в glm и пытаюсь преобразовать координаты трехмерного объекта в координаты окна, используя метод glm.project() в pyqt5 GUI.

Вот код события нажатия кнопки мыши для преобразования трехмерной координаты в координаты окна.

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 голосов
/ 05 июля 2019

glm.project() принимает 4 аргумента vec3 (), mat4 (), mat4 () и vec4 () соответственно.

, но в приведенном выше сценарии 2-й и 3-й аргументы не относятся к типу mat4 (), поэтомуэти аргументы должны быть преобразованы в mat4 ().

Это можно сделать, скопировав элементы по одному из переменной cube ['model'] и других в переменную mat4 () в частях переменной 4 vec4 () изатем передайте эту переменную mat4 () в glm.project ().

...