Rotation mehrerer Objekte
-
Hi!
Ich hab mir eine Klasse für 3D Würfel zusammengebaut - Jetz habe ich versucht die rotieren zu lassen, was auch funktioniert zumindest um die x,y,z achsen...
Ich hätte nun eine Frage:
Wie muss ich das aufbauen damit ich um eine beliebige Achse rotieren kann?
Meine Draw Methode jedes würfels sieht so aus (Vorsicht...ist sicher einiges falsch)
Device->SetStreamSource(0,VB,0,sizeof(CUSTOMVERTEX)); D3DXMatrixTranslation(&TranslationMatrix,Position.x,Position.y,Position.z); D3DXMATRIX bufx,bufz,bufy,trans; D3DXMatrixRotationZ(&bufz,rot.z); D3DXMatrixRotationX(&bufx,rot.x); D3DXMatrixRotationY(&bufy,rot.y); D3DXMatrixMultiply(&bufx,&bufz,&bufx); D3DXMatrixMultiply(&RotationMatrix,&bufy,&bufx); D3DXMatrixTranslation(&trans,vec.x,vec.y,vec.z); D3DXMatrixMultiply(&WorldMatrix,&trans,&RotationMatrix); D3DXMatrixMultiply(&WorldMatrix,&TranslationMatrix,&WorldMatrix); Device->SetTransform(D3DTS_WORLD,&WorldMatrix); Device->DrawPrimitive(D3DPT_TRIANGLELIST,0,12);Mit "trans" hatte ich versucht das Rotieren um eine beliebige Achse hinzubekommen aber denke nicht dass das so geht... "vec" sollte dabei die achse sein...
"rot" speichert um wieviel in x,z,y rotiert werden soll
Im Moment hab ich einen vector der einen "hypercube" enthält
also jeweils 5 Würfel in x,y,z...
also insgesamt 125 und ich würde gerne jeden einzeln rotieren lassen (was funktioniert) und auch das gesamte konstrukt...
nun beides einzeln geht...indem ich zuerst verschiebe und dann rotiere...oder umgekehrt aber gemeinsam geht es eben nicht
Ich dachte mir wenn ich eine Achse bestimme um die ich rotieren lassen kann dann setze ich die einfach auf die mittlere achse jeder seite und rotiere alle würfel um den mittelpunkt des großen "würfels" aber ich weiß nicht wie ich das anstellen muss
Hoffe ihr könnt mir helfen
-
Ich könnte dir erklären, wie man das machen kann, aber sei gewarnt: du wirst sehr schnell auf Probleme wie Gimbal Lock stoßen.
Daher empfehle ich dir, dich stattdessen mit Quaternionen auseinanderzusetzen - das spart einiges an Ärger
