Problem mit der Rotation von 3D-ObjektenC++

Programme in C++. Entwicklerforum
Anonymous
 Problem mit der Rotation von 3D-Objekten

Post by Anonymous »

Ich verstehe etwas beim Drehen eines 3D-Objekts nicht.
Die Idee ist, dass ich mein Objekt um die X- und Y-Achse drehen möchte. An der Anfangsposition des Objekts kann ich es zunächst normal um X und um Y drehen. Sobald ich mein Objekt um 90 Grad um X drehe, kann ich es nicht mehr um Y drehen (es dreht sich stattdessen um Z)! Ich habe das Gleiche versucht, indem ich es zuerst um 90 Grad um Y drehe, dann drehe ich es um X und sehe, dass es sich um x dreht!
Ist das eine Frage der relativen Achse? Aber wenn das der Fall ist, sollte es im zweiten Fall genauso sein, oder?

Code: Select all

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();
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post