Hallo Ihr lieben,
ich weiß nicht mal ob das überhaupt möglich ist.
Aber was ich suche, ist ein Weg, aus 2 Rotationsmatrizen eine 3. Matrix zu berechnen.
Mit dieser 3. Matrix soll man ein Objekt um den Wert rotieren können, um den sich die erste Matrix von der 2. unterscheidet.
Der Hintergrund ist dieser:
Es ist wiedereinmal für mein Projekt names SpaceCraft, genauer für den Realtime Planeten Renderer.
Ich verwende eine Ebene oder Vertex-Gitter für die Geometriedarstellung.
Diese Gitter moduliert immer den aktuell sichtbaren Teil der Kugel. Desto weiter man von der Kugel entfernt ist, desto stärker
ist das Gitter gekrümmt (wird im Vertex-Shader erledigt).
Wenn ich mich um den Planeten herum bewege wird das Gitter mitbewegt. Dazu wird eine Rotationsmatrix berechnet welche das Gitter auf den Schnittpunkt zwischen Kamera Achse und Planeten ausrichtet.
(Das sieht ungefähr
so aus)
Matrixberechnung:
|
C-/C++-Quelltext
|
1
2
3
4
5
|
DRVector3 rotation_ZAxis = cameraIntersectionPlanet.normalize();
DRVector3 rotation_XAxis = camera.getYAxis().cross(rotation_ZAxis).normalize();
DRVector3 rotation_YAxis = rotation_ZAxis.cross(rotation_XAxis).normalize();
DRMatrix rotationMatrix = DRMatrix::axis(rotation_XAxis, rotation_YAxis, rotation_ZAxis).invert();
glMultMatrixf(rotationMatrix);
|
Um die Textur für diese Position zu berechnen wird ebenfalls diese Matrix verwendet.
Die Textur wird mit einem umfangreichen Perlin Noise Algorithmus im Shader berechnet. Er ist so umfangreich das
ich ihn auf den meisten Computer nicht in jedem Frame in hoher Auflösung neuberechnen kann.
Daher werde ich nur den Teil neuberechnen der neu dazu kommt.
Ich verwende OpenGL FrameBuffer um die Daten mittels eines Pixelshaders in eine Textur rendern zu können.
Das generieren der gesamten Textur dauert also einige Frames. Die Textur wird mit der Rotationsmatrix berechnet,
die aktuell war beim Start.
Wenn ich mich nun weiter um den Planeten bewege, ändert sich die Rotationsmatrix. Um diese Differenz muss ich jetzt die noch unfertige Textur
verschieben, damit der Spieler den richtigen Ausschnitt des Planeten sieht.
Wenn ihr Ideen dazu habt, Anregungen, Tutorials würde ich mich sehr freuen.
Alles Liebe,
das programmierende Einhorn