Entwickler-Ecke
Multimedia / Grafik - Direct3D Ego-Perspektive
hd - Mi 04.06.03 21:55
Titel: Direct3D Ego-Perspektive
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
Tweafis - 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
hd - 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:
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.
Simon Joker - 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
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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!