Hallo!
Also:
1) Ich habe ein Modell, mit einer Plane auf der xz-Ebene (Mittelpunkt im Ursprung)
2) Ich habe eine große Kugel
Nun will ich auf dieser das Modell so platzieren, dass seine "Grundebene" auf der Tangentialebene des Punktes wo es gerendert wird, liegt.
Bis jetzt habe ich diese Rotationsmatrix verwendet:
|
C-/C++-Quelltext
|
1
2
3
|
m_mTranslation = ogMatrixTranslation(og3DVector(0.f, m_vPositionS.fR, 0.f));
m_mRotation = ogMatrixRotation(og3DVector(0.f, m_vPositionS.fPhi, m_vPositionS.fTheta));
m_mTransform = m_mTranslation * m_mRotation;
|
Wobei m_vPositionS die Position in Kugelkoordinaten speichert. Nun hat sich aber (empirisch) herausgestellt, dass das gerenderte Objekt NICHT auf dem Punkt liegt, der in m_vPositionS definiert ist. (Nebenfrage: WIESO??)
Also hab ich nach einer anderen Lösung gesucht und es dann so probiert:
|
C-/C++-Quelltext
|
1
2
|
m_mTransformation = ogMatrixRotationX(vPositionS.fTheta) * ogMatrixRotationY(vPositionS.fPhi) *
ogMatrixTranslation(m_vPositionK);
|
Wobei m_vPositionK die Position auf der Kugel in kartesischen Koordinaten darstellt (umgerechnet von m_vPositionS).
Nun erscheint das Modell zwar an der richtigen Stelle, doch ist seine Basisebene nicht mehr gleich der Tangentialebene wie es bei der anderen Transformationsmatrix der Fall war. --> ist für mich eigentlich nicht verständlich...
Hoffe ihr habt eine Idee, was das sein könnte. Habe mal auf die Ungenauigkeit von float und sinf, cosf getippt... Aber dass da so massive Fehler auftreten kommt mir doch etwas spanisch vor...
Danke schon mal
Black-Panther
PS: Habe auch schon diese Version der Matrix probiert, funktioniert auch nicht:
|
C-/C++-Quelltext
|
1
2
|
m_mTransformation = ogMatrixRotationY(vPositionS.fPhi) * ogMatrixRotationZ(vPositionS.fTheta) *
ogMatrixTranslation(m_vPositionK);
|