S
Danke an alle antworten. Ich habe es jetzt geschafft,Werde aber nochmal an der Architektur Für meine Engine Feilen.
Anstadt der Euler angles werde ich eine Klasse einbauen Wälche mit Matrizen arbeitet, aber die Möglichkeit gibt Euler Angles vom Matrix zu hohlen und diesen auch von Euler Angles zu Setzen.(Also dann nur Für den Editor)
Das wird denke ich auch der Geschwindigkeit zu gute kommen.
Gemacht habe ich das Ganze Jetzt Folgendermaßen, wird aber wie gesagt nicht so bleiben:
PxTransform Transform;
PxVec3 Rod;//Rotation Als Euler angle
D3DXMATRIX RotMxX,RotMxY,RotMxZ,
RotMx;
D3DXMatrixRotationX(&RotMxX,Rod.x);//Rotiere den Matrix Auf der X Achse
D3DXMatrixRotationY(&RotMxY,Rod.y);//Rotiere den Matrix Auf der Y Achse
D3DXMatrixRotationZ(&RotMxZ,Rod.z);//Rotiere den Matrix Auf der Z Achse
RotMx=RotMxX*RotMxY*RotMxZ;//x,y,z in RotMx Multiplizieren
Transform=PxTransform(DXVECTOPXVEC3(Pos),PxQuat(DXMATRIXTOPXMATRIX(RotMx)));//DXMATRIXTOPXMATRIX Konvertiert den Matrix nur in einen PxMatrix(ich hätte natürlich sofort einen solchen nehmen können,
//Dann hätte ich aber die D3DX Funktionen nicht verwenden können und hätte alles selber machen müssen bzw. Erst nachsehen wie das ganze unter PhyX Klappt...So war's erstmal einfacher.)
//Und Wir haben einen Fertigen Quaternion!
... Und Wieder Zurück nach Euler Angle:
PxTransform Transform=pActor->getGlobalPose();//Transform hohlen
D3DXMATRIX RodMatrix;
PxMat33 PxRodMatrix=PxMat33(Transform.q);//PxMatrix Aus Quaternion erstellen(Ist mir gerade eben Aufgefallen, das PhysX Das einem sogar abnimmt)
RodMatrix=PXMATRIX33TODXMATRIX(PxRodMatrix);//Zurück Konvertieren
PxVec3 Rod;
Rod.z=atan(RodMatrix.m[0][1]/RodMatrix.m[0][0]);
Rod.x=atan(RodMatrix.m[1][2]/RodMatrix.m[2][2]);
Rod.y=asin(RodMatrix.m[0][2]);
//Und wir haben Wieder die Euler Angles(Wenn auch leicht ungenau)
Die Lösung Obliegt also weniger Mathematischer Logik, als mehr einem Genauen Nachsehen in die NVIDIA PhysX Doku ...
Ich werde wie gesagt sowieso die Engine Nochmal ein Bischen umbasteln was das an geht. Jedenfalls Funktioniert es erstmal.
Denke Für Alle Antworten!
LG SK