2015-07-31 2 views
1

Я пытаюсь отобразить 3D-модель с использованием OpenGL. А для матриц проекции и преобразования я использую glm. У меня есть модель на экране, и она работает так же, как я намеревался; кроме одной маленькой проблемы.Z координаты перевернуты при использовании glm

Я устанавливаю матрицу перевода в модели как

glm::translate(glm::vec3(0, 0, 4)

для перемещения модели немного вперед, так что я могу видеть это. Поскольку в OpenGL по умолчанию отрицательный z выходит в сторону «камеры», а положительный z - вперед, я ожидал, что это сработает, но это не так. Он работает только тогда, когда я установил его

glm::translate(glm::vec3(0, 0, -4)

Но это кажется странным для меня, так как я устанавливаю мой zNear до 0,01 и zFar 1000. переворачивается значения Z GLM или я делаю что-то здесь не так?

Вот мой код:

glm::mat4 rotation = glm::mat4(1.0f); 
glm::mat4 translation = glm::translate(glm::vec3(0, 0, -4)); 
glm::mat4 scale = glm::mat4(1.0f); 

glm::mat4 modelMatrix = translation * rotation * scale; 

glm::mat4 projectionMatrix = glm::perspective(70.0f, aspectRatio, 0.01f, 1000.0f); 

glm::mat4 transformationMatrix = projectionMatrix * modelMatrix; 

ответ

2

При вызове перспективы() с рядом = 0,01 и дальних = 1000,0 плоскостей, его фактическое значение является то, что вы сокращаете его как -0.01 для -1000.0, так что вы должны поместите значение z объекта в диапазон [-0.01, -1000.0].

Представьте правую координату и предположите, что значение z вашего глаза равно 0,0 по умолчанию. enter image description here

+0

Да, оказалось, что мое предположение о положительном z на экране было неправильным. Большое спасибо за ваш ответ. –