Autor Beitrag
hd
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mi 04.06.03 21:55 
Hallo alle zusammen!

Ich hab da mal ein recht kniffliges Problem mit Direct3D. Ich programmiere einen Ego-Shooter und habe gerade die Mausunterstützung eingebaut. Ich kann also mit der Maus meinen Blickwinkel verändern (oben/unten und links/rechts). Das klappt auch alles wunderbar, so lange man sich nur nach rechts/links (also um die Y-Achse) oder unten/oben (also um die X-Achse) dreht. Schaut man aber z.B. nach unten links so findet gleichzeitig eine Drehung um die Z-Achse statt, was im 3D-Raum auch logisch ist. Nur möchte ich das irgendwie verhindern bzw. kompensieren, da ich meinen "Kopf" nicht zur Seite neigen möchte (verwirrt in einem 3D-Shooter nur unnötig). Bei Half-Life & Co ist das ja schließlich auch nicht der Fall, muß also irgendwie möglich sein...
Wenn einer weiß, wie das geht oder auch nur ne Vermutung hat, wär ich für jeden Vorschlag seeehr dankbar.

Gruß,
hd

_________________
Das kriegen wir schon irgendwie hin... ;-)
Tweafis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: Mi 04.06.03 22:04 
Du musst aus der Mausbewegung die Y Bewegung und die X Bewegung rausfiltern und dann auf die einzelnen Achsen anwenden.

(sorry, falls ich *mist*e gelabert hab, ist nur n Denkanstoss)

Fis

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
hd Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Do 05.06.03 12:15 
Da liegt ja gerade das Problem! Wenn ich mich erst um die Y-Achse und danach um die X-Achse (oder umgekehrt) drehe, rotiere ich automatisch ein Stück um die Z-Achse. Ich müßte erstmal eine Drehung um X und danach eine Drehung um eine um X-mitgedrehte Y-Achse machen, damit's stimmt. Ich weiß aber leider nicht genau, wie das geht. Ich habe folgendes mal ausprobiert, aber dadurch wurde der Effekt irgendwie noch verstärkt:

ausblenden Quelltext
1:
2:
3:
4:
D3DXMatrixMultiply(matView, matView, matRotX);
D3DXVec3TransformCoord(vNew, vNew, matRotX);
D3DXMatrixRotationAxis(matRot, vNew, -diff_pos.X * MOUSE_SENSITIVITY);
D3DXMatrixMultiply(matView, matView, matRot);

Wobei vNew mein Normalvektor der Kamera in Y-Richtung ist.
Kann ich übehaupt einen Vektor mit einer Rotationsmatrix drehen?? Wär toll, wenn mir das jemand sagen könnte.

_________________
Das kriegen wir schon irgendwie hin... ;-)
Simon Joker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236
Erhaltene Danke: 1



BeitragVerfasst: Do 05.06.03 12:24 
Hi hd

ich kann die nicht sagen, wie du es in DirektX machst, aber grundsätzlich müsstes du dafür hierarchische Objekte haben.
Zum Beispiel
ausblenden Quelltext
1:
2:
3:
_DummyObject für Y-Drehung
  |_DummyObject für X-Drehung
     |_CameraObjekt

So könntes du die Drehungen unabhängig von ein ander haben.