@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;
}
  • Вопрос задан
  • 54 просмотра
Пригласить эксперта
Ответы на вопрос 1
gbg
@gbg
Любые ответы на любые вопросы
Не следует все время одну и ту же матрицу преобразований крутить-вертеть между кадрами - от этого накапливается погрешность (матрица перестает быть ортогональной), которая выглядит как изменение масштаба.

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

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

Войти через центр авторизации
Похожие вопросы