искажение формы при повороте матрицы модели - PullRequest
1 голос
/ 11 июля 2020

Я пытаюсь повернуть фигуру, используя библиотеку glm вместе с openGL. К сожалению, когда я пытаюсь повернуть фигуру с помощью glm :: rotate (), размеры моей фигуры растягиваются. Наряду с этим фигура вращается вокруг, казалось бы, случайной точки. Все двумерно.

Код вершинного шейдера:

#version 330 core

layout(location = 0) in vec2 pos;
uniform mat4 model;
uniform mat4 projection;
uniform mat4 view;

void main()
{
    gl_Position = projection * view * model * vec4(pos.x, pos.y, 1.0f, 1.0f);
}

Код матрицы модели:

m_angle = angle;
m_modelMatrix = glm::rotate(glm::mat4(1.0f), glm::radians((float)m_angle), glm::vec3(0, 0, 1));

Код матриц проекции и просмотра:

glm::mat4 proj = glm::mat4(1.0f);
glm::mat4 view = glm::mat4(1.0f);
proj = glm::perspective(glm::radians(53.f), 1.f, 0.1f, 100.f);
view = glm::translate(view, glm::vec3(0.0f, 0.0f, -3.0f));    

1 Ответ

0 голосов
/ 11 июля 2020

Проблема вызвана тем, что матрица проекции не заботится о соотношении сторон области просмотра. В вашем коде параметр аспект равен 1.0 :

proj = glm::perspective(glm::radians(53.f), 1.f, 0.1f, 100.f);

Параметр аспекта должен быть соотношением ширины и высоты окна просмотра соответственно:

float aspect = (float)window_width/(float)window_height;
proj = glm::perspective(glm::radians(53.f), aspect, 0.1f, 100.f);
...