[gelöst] DirectX links drehendes Koordinatensystem?
-
Einfach die z-Achse mit -1 skalieren, dann ist das Koordinatensystem normal.
Kannst ja auf OpenGL umsteigen, die verwenden das rechtsdrehende
-
Senfti schrieb:
Kannst ja auf OpenGL umsteigen, die verwenden das rechtsdrehende
Weder OpenGL noch Direct3D geben in irgendeiner Form eine Händigkeit des Weltkoordinatensystems vor. Die wird einzig und allein durch die verwendeten Matritzen und damit den Benutzer bestimmt...
-
OpenGL und D3D kennen keine Linkshändiges oder Rechtshändiges Koordinatensystem - sie multiplizieren einfach mit den Matrizen, die man ihnen vorgibt- wie es dot schon gesagt hat
Lustig bei right-handed:
y
| /z+
| /
|/
0------x
/
/
z-aber nach der Transformation in normalisierten Devicekoordinaten ist -1 näher am Betrachte als +1
-
view matrix und Projektionsmatrix:
D3DXMATRIX matView; D3DXMatrixLookAtLH(&matView,&D3DXVECTOR3 (PData.matCamPos._41, PData.matCamPos._42, PData.matCamPos._43), &PData.lookat, &D3DXVECTOR3 (0.0f, 1.0f, 0.0f)); d3ddev->SetTransform(D3DTS_VIEW, &(matView)); D3DXMATRIX matProjection; D3DXMatrixPerspectiveFovLH (&matProjection, D3DXToRadian(45), (FLOAT)SCREEN_WIDTH / (FLOAT)SCREEN_HEIGHT, 1.0f, 500.0f); d3ddev->SetTransform(D3DTS_PROJECTION, &matProjection);
eigentlich ist es auch kein problem wie es so ist, es ging nur um schönheit
wir haben einige formeln und zeichnungen für InverseKinematic gemacht und auf denen haben wir ein rechtshändiges Koordinatensystem genommen. daher müssten wir jetzt in der berechnung erstmal vom einen ins directx system umdenken. bzw jede x-koordinaten umdrehen.
-
Rat mal, wofür das LH in D3DXMatrixLookAtLH und D3DXMatrixPerspectiveFovLH steht.
Hiweis: Es gibt die gleichen Funktionen auch als *RH Varianten...
-
BTW: D3DX ist deprecated
First of all math stuff like D3DXMatrixPerspectiveFovRH can be found in the replacement library DirectXMath (formerly called XNAMATH) which offers for instance XMMatrixPerspectiveFovRH.
-
Das stimmt, aber ich vermute mal, dass er D3D9 verwendet und dann isses wurscht, weil das is selbst genauso deprecated... :p
Aber in jedem Fall ein guter Hinweis.
-
oh ja, danke.
aber wenn ich das jetzt beide in RH umänder dreht sich zwar das koordinatensystem, (bzw das bild ist gespiegelt) und die objekte sind seltsam transparent, irgendwie zerstört...
habe das ganze porgramm durchgeschaut ob ich noch andere stellen finde wo irgendwie ein L oder etc vorkommt, aber nichts.
-
cl90 schrieb:
aber wenn ich das jetzt beide in RH umänder dreht sich zwar das koordinatensystem, (bzw das bild ist gespiegelt) und die objekte sind seltsam transparent, irgendwie zerstört...
Weil jetzt natürlich die Winding Order deiner Faces verkehrt rum ist. Das, was früher deine Back Faces waren, sind jetzt die Front Faces und umgekehrt...
-
ah danke für den tipp!
musste einfach noch den renderstate auf umgedrehte Reihenfolge umstellen.m_d3ddev->SetRenderState(D3DRS_CULLMODE, D3DCULL_CW);
Danke an alle Helfer