ERLEDIGT
NEIN
NEIN
ANTWORTEN
8
8
ZUGRIFFE
5328
5328
EMPFEHLEN
-
Hallo,
wie stelle ich die ViewMatrix so ein, dass mich immer um einen bestimmten Punkt drehe?
Also nehmen wir z.B. "new Vector3(-32.007011f, 1.386353f, 10.628818f)".
Um diesen Punkt möchte ich mich mit der Maus (x-und y-) drehen können(quasi im Kreis), sodass aber immer der besagte Punkt zu sehen ist.
Danke
Gruß,
xai
-
Hehe... ich habe da ein recht ähnliches Problem.
In meiner Anwendung werden sämtliche Objekte im 3D-Raum durch Actors repräsentiert. Ein Actor hat eine Position, eine Ausrichtung (in Winkeln yaw, pitch, roll gespeichert), Geschwindigkeit, Rotation, Masse usw.
Das gilt auch für den Camera Actor. Das Problem ist nun: Wie komme ich von den Ausrichtungswinkeln auf die ViewMatrix.
Mir ist schon klar, dass ich Matrix.LookAtLH verwenden muss, nur wie komme ich an den LookAt- und den Up- Vektor?
Der LookAt Vektor müsste irgendwas in der Form Camera.PositionVector + Camera.DirectionVector, wobei DirectionVector yaw und pitch repräsentiert. (Eben nur die Richtung, aber nicht die Drehung um die Z-Achse)
Hier: CUnit -> MDX Tutorials -> Camera habe ich ein Tutorial zur Erstellung einer First-Person Kamera gefunden. Nur leider kann ich es nicht auf mein Problem anwenden, da in meinem Fall die View-Matrix nicht mit der Kamera gespeichert wird. (Und ich verstehe den Code/die Mathematik dahinter nicht so ganz
)
Es muss doch mathematisch eindeutig möglich sein, aus der Position und der Ausrichtung in Winkeln die entsprechende Matrix zu berechnen....Geändert von Sunray (29.12.05 um 23:16 Uhr)
Zu jedem Problem gibt es mindestens eine Lösung.
Zu jeder Lösung gibt es mindestens eine bessere Lösung
-
Hallo Sunray,
ja mit LookAtLH und so weiter eier ich hier auch schon eine ganze Zeit rum...aber das MDX Tutorial werde ich mir mal reinziehen, danke dafür! Ich habe hier ein anderes DirectX+C# Projekt liegen, in dem man sich mit der "First-Person" Kamera bewegt. Ansich müsste es damit ein leichtes sein, sich um einen fixen Punkt zu drehen.
Ich hoffe mal, dass sich bis ins nächste Jahr...in 3 Tagen
noch wer mit einem Lösungsweg findet.
Guten rutsch,
xai
-
Cool! Falls dir eine Lösung an den Kopf springt, könntest du sie hier posten, ja?
Zu jedem Problem gibt es mindestens eine Lösung.
Zu jeder Lösung gibt es mindestens eine bessere Lösung
-
Ich habe eine Lösung für mein Problem gefunden!
Mit diesen Funktionen kommst du von Winkeln zu den für Matrix.LookAtLH benötigten Vektoren. Alles, was jetzt noch zu tun ist, wäre das Einstellen der Kamera. In deinem Fall musst du die Kamera Position einfach noch ein wenig auf der negativen Z-Achse der Ausrichtung bewegen.Code :1 2 3 4 5 6 7 8 9 10 11 12 13
public static Vector3 CreateDirection(float yaw, float pitch) { Vector3 v = new Vector3(0, 0, 1); v.TransformCoordinate(Matrix.RotationYawPitchRoll(yaw, pitch, 0)); return v; } public static Vector3 CreateUp(float pitch, float roll) { Vector3 v = new Vector3(0, 1, 0); v.TransformCoordinate(Matrix.RotationYawPitchRoll(0, pitch, roll)); return v; }Ich habe das allerdings nicht ausprobiert.Code :1 2 3 4 5 6 7 8
Vector3 obj = new Vector3(-32.007011f, 1.386353f, 10.628818f); Vector3 direction = CreateDirection(yaw, pitch); Vector3 up = CreateUp(pitch, roll); float distance = 5; //Distanz zu deinem Punkt Vector3 camera = obj + (distance * (- direction)); device.Transform.View = Matrix.LootAtLH(camera, direction, up);
Zu jedem Problem gibt es mindestens eine Lösung.
Zu jeder Lösung gibt es mindestens eine bessere Lösung
-
Ja cool,
was muss ich denn für yaw, pitch und roll angeben?
Guck mir den Rest sonst morgen etwas genauer an.
Danke erstmal,
xai
-
Yaw, Pitch und Roll sind die Winkel der Orientierung, wobei Yaw für die horizontale Drehung, Pitch für auf- und ab und Roll für die Neigung steht.
Achtung: diese Winkel sind im Bogenmass!
Wenn du automatisch um den Punkt drehen willst, musst du den Wert eines Winkels einfach immer weiter erhöhen. Wenn du die Rotation mit der Maus kontrollieren willst, musst du die relative Bewegung der Maus verglichen mit den letzten Frame nehmen (DirectInput) oder berechnen (Windows.Forms). Diese relativen Koordinaten kannst du dann als Änderung der Yaw/Pitch Winkel anwenden...
Allerdings aufgepasst: Winkel sind zyklisch. Ein Winkel von 370° ist in Wahrheit nur 10°. Desgleichen ist 2.2*Pi eigentlich 0.2*Pi. Wenn du also direkt die Mauskoordinaten verwendest, wird sich nicht viel bewegen.Zu jedem Problem gibt es mindestens eine Lösung.
Zu jeder Lösung gibt es mindestens eine bessere Lösung
-
Jane,
Zitat von Sunray
ist klar. Hab bloss die Umrechung ins Bogenmaß vergessen!
Hmm, hiermit:
Code :1 2 3 4 5 6 7 8 9 10
x+=0.2f; //this.device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI/4, this.device.PresentationParameters.BackBufferWidth/this.device.PresentationParameters.BackBufferHeight, 1.0f, this.meshRadius*3 + z); Vector3 obj = new Vector3(-32.007011f, 1.386353f, 10.628818f); Vector3 direction = CreateDirection(Geometry.DegreeToRadian(x), 0.0f); Vector3 up = CreateUp(0.0f, 0.0f/*roll*/); float distance = 10; //Distanz zu deinem Punkt Vector3 camera = obj + (distance * (- direction)); device.Transform.View = Matrix.LookAtLH(camera, direction, up);
drehe ich mich zwar um meinen Punkt(Vector3(-32.007011f, 1.386353f, 10.628818f)), aber die Kamera guckt in eine andere Richtung.
Ich wollte doch, dass ich mich um den Punkt drehe und Ihn dabei immer in Blickrichtung habe....oder habe ich noch was vergessen?
Gruß,
xai
-
ah... moment.
Ich glaub ich hatte da was nicht verstanden. Ok... Versuch mal bei Matrix.LookAtLH anstelle von direction direkt deinen Punkt einzusetzen... Dann sollte die Kamera den angucken...Zu jedem Problem gibt es mindestens eine Lösung.
Zu jeder Lösung gibt es mindestens eine bessere Lösung
Ähnliche Themen
-
BorderLayout richtig einstellen
Von ITA im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 12Letzter Beitrag: 27.02.08, 16:16 -
Navigationsleiste Richtig einstellen
Von Company_Q im Forum CSSAntworten: 3Letzter Beitrag: 04.01.06, 10:06 -
Managed DirectX - Kamera richtig positionieren
Von broetchen im Forum .NET ArchivAntworten: 2Letzter Beitrag: 16.06.05, 15:36 -
Geschwindigkeit richtig einstellen
Von InTruster im Forum Cinema 4DAntworten: 2Letzter Beitrag: 09.03.05, 14:43 -
Bildschirm richtig einstellen ?
Von Xeal87 im Forum HardwareAntworten: 3Letzter Beitrag: 31.01.04, 18:12





Zitieren
Login





