Проблема с вращением 3D-объектаC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Проблема с вращением 3D-объекта

Сообщение Anonymous »

Я что-то не понимаю во время вращения 3D-объекта.
Идея состоит в том, что я хочу вращать свой объект вокруг осей X и Y. Изначально в исходном положении объекта я могу нормально вращать его вокруг X и вокруг Y. Как только я поворачиваю свой объект на 90 градусов вокруг X, я больше не могу вращать его вокруг Y (вместо этого он вращается вокруг Z)! Я попробовал то же самое, сначала повернув его на 90 градусов вокруг Y, затем я повернул его вокруг X и увидел, что он вращается вокруг x!
Это вопрос относительной оси? Но если это так, то и во втором случае должно быть то же самое, верно?
const char* vertexShaderSource = R"(
#version 330 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec3 aNormal;
layout (location = 2) in vec2 aTexCoord;

out vec3 FragPos;
out vec3 Normal;
out vec2 TexCoord;

uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;

void main()
{
FragPos = vec3(model * vec4(aPos, 1.0));
Normal = mat3(transpose(inverse(model))) * aNormal;
TexCoord = aTexCoord;
gl_Position = projection * view * model * vec4(aPos, 1.0);
}
)";

void OpenGlWidget::paintGL()
{
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glBindTexture(GL_TEXTURE_2D, mPushButton->texture);
glBindVertexArray(mPushButton->vao);
glm::mat4 model = glm::rotate(glm::mat4(1.0f), glm::radians(m_rotationAngleX), glm::vec3(1.0f, 0.0f, 0.0f));
model = glm::rotate(model, glm::radians(m_rotationAngleY), glm::vec3(0.0f, 1.0f, 0.0f));
glUniformMatrix4fv(glGetUniformLocation(m_shaderProgram, "model"), 1, GL_FALSE, glm::value_ptr(model));
glDrawElements(GL_TRIANGLES, mPushButton->indices.size(), GL_UNSIGNED_INT, 0);
glBindVertexArray(0);
}

void OpenGlWidget::mouseMoveEvent(QMouseEvent* event)
{
if (event->buttons() & Qt::LeftButton) {
int deltaX = event->x() - m_lastMousePos.x();
int deltaY = event->y() - m_lastMousePos.y();
m_lastMousePos = event->pos();

m_rotationAngleX += deltaY * 0.5f;
m_rotationAngleY += deltaX * 0.5f;

update();
}
}


Подробнее здесь: https://stackoverflow.com/questions/785 ... tion-issue
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»