openGL rotate Kamera um sich selbst?
Hi, ich versuche grade in openGL mit 3D anzufangen aber meine Kamera rotiert immer nur um den Koordinatenursprung! Hier ist mein Code: Für jedes Model jeden Frame rufe ich:
models[i])->draw(currentShader, projectionMatrix * camera.getTransformation().mat()
In der draw function von jedem model ist dann:
shader.setUniform<Matrix4>(shader.getUniformLocation("MVP"), VP * transformation.mat());
Jetzt mache ich bei der cursorPositionCallBack funktion:
enviroment.camera.getTransformation().rotate(Transformation::Y, movedX);
Damit es immer um die gegebene Distanz rotiert!
Allerdings um den world-orgin. Obwohl ich dachte das ich es mit diesem Code löse: (Aus schnitt aus der "Transformation" klasse:
Transformation & rotate(Axes axes, float angel, bool degree = true) {
Vector3 curT = this->getTranslation();
setTranslation({0, 0, 0});
matrix = glm::rotate(matrix,
degree ? glm::radians(angel) : angel,
Vector3(axes == X ? 1 : 0, axes == Y ? 1 : 0, axes == Z ? 1 : 0));
setTranslation(curT);
return *this;
}
Transformation & setTranslation(Vector3 values) {
matrix[3][0] = values.x;
matrix[3][1] = values.y;
matrix[3][2] = values.z;
return *this;
}
Die getTranslation Methode benutzt die gleichen Felder wie setTranslation.
Im Shader wird einfach gl_Position = MVP * vec4(position); gesetzt. Ich bin wirklich ratlos und nicht mal gpt-4 kann mir das Problem sicher sagen!
1 Antwort
Du brauchst die inverse Transformationsmatrix der Kamera. Du willst ja die Punkte vom Globalen Space in den Kamera-Space transformieren.
Deine Rotation der Kamera sollte aber korrekt um den Pivot des Objekts stattfinden. Ich bin mir aber nicht sicher,w as glm::rotate genau tut.
Evtl. printest du dir da mal Zwischenergebnisse aus und schaust, ob du das Problem identifizieren kannst.