Изменение угла в glm ::спектива отражает объект

Я рисовал 2 куба на экране и понял, что мой объект ведет себя очень странно, когда я изменил угол в матрице перспективы, вот мой код

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glUseProgram(programID);
GLuint mvp = glGetUniformLocation(programID, "MVP");
glm::mat4 Projection = glm::perspective(45.0f, 4.0f / 3.0f, 0.1f, 10.0f);
glm::mat4 translate = glm::translate(glm::mat4(1.0f), vec3(-2.0f, 0.0f, -5.0f));
glm::mat4 rotate = glm::rotate(glm::mat4(1.0f), 54.0f, vec3(-1.0f, 0.0f, 0.0f));

glm::mat4 MVP = Projection * translate * rotate;

glUniformMatrix4fv(mvp, 1, GL_FALSE, &MVP[0][0]);

glDrawElements(GL_TRIANGLES, numOfIndices, GL_UNSIGNED_SHORT, nullptr);translate = glm::translate(glm::mat4(1.0f), vec3(3.0f, 0.0f, -6.0f));
rotate = glm::rotate(glm::mat4(1.0f), 54.0f, vec3(0.0f, 1.0f, 0.0f));

MVP = Projection * translate * rotate;

glUniformMatrix4fv(mvp, 1, GL_FALSE, &MVP[0][0]);

glDrawElements(GL_TRIANGLES, numOfIndices, GL_UNSIGNED_SHORT, nullptr);

2 куба имеют одинаковую матрицу проекции, но разные матрицы преобразования и поворота. Вот мой шейдер

#version 430

in layout(location=0) vec3 position;
in layout(location=1) vec3 color;

uniform mat4 MVP;

out vec3 theColor;

void main(){
gl_Position = MVP * vec4(position,1.0f);
theColor = color;
}

шейдер просто умножает матрицу MVP на вершину позиции. Когда я запустил код с 45.0f для степени в матрице перспективы, я получил это:
введите описание изображения здесь

и затем, когда я запустил его с 55.0f, я получил это:
введите описание изображения здесь

кажется, что я сел за объект и посмотрел на них оттуда, и когда я сделал 50.0f, он закрылся, и я могу видеть только угол одного из кубов.

0

Решение

Хорошо, я понял это, glm :: перспектива принимает радиан в качестве первого аргумента, поэтому я должен был написать (3.14f / 180.0f) * 45.0f, а не просто 45.0f

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]