[D3DX vs. "von Hand"] Rotation
-
Huhu,
Das Problem ist gleichzeitig Mathematik, aber auch eine Frage bezüglich D3DX, daher denke ich, sollte ich es lieber hier posten.
Mir ist bei Rotation von Vertices "von Hand" etwas aufgefallen, das ich mir nicht erklären kann:Wenn ich ein Vertex rotiere, werden die Koordinaten nicht nur gedreht, sondern werden seltsamerweise frame für frame immer kleiner. Als Beispiel die Rotation eines Dreiecks um die y Achse:
float yrot = 0.01f, cosrot = cos(yrot), sinrot = sin(yrot); vData[1].pos.x = cosrot*vData[1].pos.x+sinrot*vData[1].pos.z; vData[1].pos.z = -sinrot*vData[1].pos.x+cosrot*vData[1].pos.z; vData[2].pos.x = cosrot*vData[2].pos.x+sinrot*vData[2].pos.z; vData[2].pos.z = -sinrot*vData[2].pos.x+cosrot*vData[2].pos.z;
vData[i].pos ist dabei vom Typ D3DXVECTOR4.
D3DX liefert natürlich die entsprechenden Methoden, um das nicht von Hand machen zu müssen, und mit diesen gibt es keine seltsamen Schrumpfeffekte:D3DXMATRIX rotMat; D3DXMatrixRotationY(&rotMat,yrot); D3DXVec4Transform(&vData[1].pos,&vData[1].pos,&rotMat); D3DXVec4Transform(&vData[2].pos,&vData[2].pos,&rotMat);
Ich wüsste nicht, wo hier ein Unterschied bestehen sollte und würde dieses Unwissen gerne loswerden.
Bitte euch daher um Hilfe :).
-
Schau dir deinen Code mal genau an.
vData[1].pos.x = cosrot*vData[1].pos.x+sinrot*vData[1].pos.z; vData[1].pos.z = -sinrot*vData[1].pos.x+cosrot*vData[1].pos.z;
In der zweiten Zeile rechnest du schon mit dem neuen .x Wert den du darüber berechnet hast
-
Ach, sowas Doofes >_<.
Danke vielmals