Ich habe ein Problem wenn ich einen Würfel mit DirectX rotieren will.
Die Rotationsachsen sind nicht auf den Würfel bezogen. Ich habe festgestellt das ich eine Achse immer so rotiere wie ich es mir vorstelle, aber die Rotation auf einer Achse hat keinen Einfluss auf die Rotation einer anderen Achse. Die rotiert, so denke ich mir, immer imWeltkoordinatensystem.
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
|
D3DXMatrixIdentity(&tmpMesh->mTranslation);
// Position/Rotation/Skalierung
D3DXMatrixRotationY(&tmpMesh->mRy,tmpMesh->fRotateY);
tmpMesh->mRotate = tmpMesh->mRy * tmpMesh->mRotate;
D3DXMatrixRotationX(&tmpMesh->mRx,tmpMesh->fRotateX);
tmpMesh->mRotate = tmpMesh->mRx * tmpMesh->mRotate;
D3DXMatrixRotationZ(&tmpMesh->mRz,tmpMesh->fRotateZ);
tmpMesh->mRotate = tmpMesh->mRz * tmpMesh->mRotate;
|
Das geht nicht
|
C-/C++-Quelltext
|
1
2
3
4
5
6
|
D3DXMatrixRotationYawPitchRoll(&mRotate,rotY, rotX, rotZ);
D3DXMatrixTranslation(&mTranslation, fx, fy, fz);
tmpMesh->mWorld = tmpMesh->mRotate * tmpMesh->mTranslation;
d3dDevice->SetTransform(D3DTS_WORLD, &tmpMesh->mWorld);
|
so ging es auch nicht
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
tmpMesh->vLook = D3DXVECTOR3(0.0f, 0.0f, 1.0f);
tmpMesh->vUp = D3DXVECTOR3(0.0f, 1.0f, 0.0f);
tmpMesh->vRight = D3DXVECTOR3(1.0f, 0.0f, 0.0f);
// Y-Achse
D3DXMatrixRotationAxis(&tmpMesh->mRy, &tmpMesh->vUp,tmpMesh->fRotateY);
D3DXVec3TransformCoord(&tmpMesh->vRight,&tmpMesh->vRight,&tmpMesh->mRy);
D3DXVec3TransformCoord(&tmpMesh->vLook,&tmpMesh->vLook,&tmpMesh->mRy);
// X-Achse
D3DXMatrixRotationAxis(&tmpMesh->mRx, &tmpMesh->vRight,tmpMesh->fRotateX);
D3DXVec3TransformCoord(&tmpMesh->vUp,&tmpMesh->vUp,&tmpMesh->mRx);
D3DXVec3TransformCoord(&tmpMesh->vLook,&tmpMesh->vLook,&tmpMesh->mRx);
// Z-Achse
D3DXMatrixRotationAxis(&tmpMesh->mRz,&tmpMesh->vLook,tmpMesh->fRotateZ);
D3DXVec3TransformCoord(&tmpMesh->vUp,&tmpMesh->vUp,&tmpMesh->mRz);
D3DXVec3TransformCoord(&tmpMesh->vRight,&tmpMesh->vRight,&tmpMesh->mRz);
|
Dieser Versuch scheiterte auch.
Ich würde mich über Hilfe freuen.
Ein Beispiel wie es funktionieren sollte ->