@IliaNeverov

Почему при повороте изменяется масштаб фигуры?

Здравствуйте! Почему у мен при изменение матрицы трансформации (для поворота) на некоторых значениях изменяется масштаб обьекта?
с++
glm::mat4 ModelMatrix(1.0f);
	ModelMatrix = glm::translate(ModelMatrix, glm::vec3(0.0f,0.0f,0.0f));
	ModelMatrix = glm::rotate(ModelMatrix,  2.0f ,  glm::vec3( 1.0f, 0.0f, 0.0f));
	ModelMatrix = glm::rotate(ModelMatrix, 0.0f, glm::vec3(0.0f, 0.0f, 1.0f));
	ModelMatrix = glm::rotate(ModelMatrix, 0.0f, glm::vec3(0.0f, 1.0f, 0.0f));

	while (!glfwWindowShouldClose(mWindow))
	{
		//first.setMatrix("ModelMatrix", ModelMatrix);
		glClearColor(0, 0, 0, 1);
		glClear(GL_COLOR_BUFFER_BIT);
	    glUniformMatrix4fv(glGetUniformLocation(first.mProgram, "ModelMatrix"), 1 , GL_FALSE, glm::value_ptr(ModelMatrix));
		vao.draw(GL_TRIANGLES);
		glfwSwapBuffers(mWindow);
		glfwPollEvents();
	}

вершинный шейдер
#version 330
// версия

// нулевой атрибут. Название атрибута должно совпадать с вызовом функции bindAttribute
layout (location = 0) in vec3 position;
in vec2 uv;

uniform mat4 ModelMatrix;
// выход на вход в фрагментный шейдер
// Приписка 'pass_' для моего удобства
out vec2 pass_uv;

// здесь не int!
void main() {
    
	// стандартная, типа глобальная переменная. В неё нужно записывать координату вершины
	gl_Position =  ModelMatrix * vec4(position, 1);

	pass_uv = uv;
}
  • Вопрос задан
  • 56 просмотров
Пригласить эксперта
Ответы на вопрос 1
gbg
@gbg
Любые ответы на любые вопросы
Не следует все время одну и ту же матрицу преобразований крутить-вертеть между кадрами - от этого накапливается погрешность (матрица перестает быть ортогональной), которая выглядит как изменение масштаба.

Составляйте новую матрицу преобразований на каждом кадре.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
CTRL+ Москва
от 250 000 до 320 000 ₽
CTRL+ Москва
от 200 000 до 300 000 ₽
CTRL+ Белград
от 250 000 до 320 000 ₽
22 нояб. 2024, в 00:55
500 руб./за проект
21 нояб. 2024, в 23:30
300000 руб./за проект
21 нояб. 2024, в 22:21
3000 руб./в час