Seite 1 von 1

Anstiegswinkel / 3DMath / "Look At"

Verfasst: 01.05.2012, 22:17
von AyJayKay
Hi :) ,
Kurz vorneweg: Ich wollte mich ein wenig mit dem bekannten "Look At" Befehl aus so mancher Engine beschäftigen und bin zum Schluss gekommen, dass es irgentwie schwieriger ist, als ich dachte :roll:

Falls jemand auf anhieb weiß wie "Look At" funktioniert oder wo ich die gängigste Erklärung finde, geht das auch, statt einer Problemlösung :D

Ich würde die Kamera nach den relativen Koordinaten des Ziels zur Kamera drehen, nachdem ich diese selbstverständlich durch eine Rechnung gewurstet hätte.

Code: Alles auswählen

Kameradrehung y-Achse = tan^(-1) von ( relarive x-Koordinate / relative z-Koordinate )
... klappt nur bei 0º < Winkel < 90º, weil das ganze bei Minus- oder Nullwerten Fehlerhaft ist. (logischer Weise ;) )

Nun könnte ich wohl einen Rattenschwanz aus if-then schreiben um die vier möglichen Varianten (4 Quadranten des Koordinatensystems) plus das Null-Problem zu lösen, fände dies aber nicht sehr elegant.
:?: :arrow: :idea:

Wer ist in Mathe weiter als 10. (Abi folgt in kürze) oder hat den Denkfehler gefunden? 8-)

Vielen Dank schon einmal,
yours ayjaykay

Re: Anstiegswinkel / 3DMath / "Look At"

Verfasst: 02.05.2012, 01:44
von simbad
Die Povray Docu ist ganz gut. Schau da mal nach.

Re: Anstiegswinkel / 3DMath / "Look At"

Verfasst: 02.05.2012, 03:54
von B.G.Michi
auch einen Blick Wert:
http://en.wikipedia.org/wiki/Atan2

mfg JFF_B.G.Michi

Re: Anstiegswinkel / 3DMath / "Look At"

Verfasst: 02.05.2012, 09:30
von AyJayKay
Ok, danke.
Ich wüede sagen atan2 ist die Antwort, aber ich werde mir den Tipp von simbad auch mal zu Gemüte führen... man lernt ja nie aus XD

Re: Anstiegswinkel / 3DMath / "Look At"

Verfasst: 02.05.2012, 11:42
von dot
Antwort: Die Differenz zwischen LookAt und Kameraposition beschreibt die Richtung der z-Achse der Kamera. Zusammen mit dem Up-Vektor kann man über das Kreuzprodukt daraus die Richtung der x-Achse und aus der nun bekannten x und z Achse über ein weiteres Kreuzprodukt die y-Achse bestimmen. Aus diesen drei Basisvektoren kann man dann direkt die entsprechende View-Matrix bauen.

Meiner Erfahrung nach ist man praktisch immer gerade dabei etwas grundlegend falsch zu machen, wenn man versucht von Vektoren auf irgendwelche Winkel zurückzurechnen (was normalerweise nichtmal eindeutig möglich ist), nur um daraus dann wieder Vektoren zu machen...

Re: Anstiegswinkel / 3DMath / "Look At"

Verfasst: 02.05.2012, 15:20
von Stephan Theisgen
Dot schreibt es zwar implziet mit: "diesen dre BASISvektoren".
Aber vor dem Zusammenbauen der Matrix --> normalisieren der Vektoren nicht vergessen...

Re: Anstiegswinkel / 3DMath / "Look At"

Verfasst: 03.05.2012, 20:55
von AyJayKay
(by the way: Ich hab mich in die Winkelrechnung verliebt und gar nicht daran gedacht das iwi anders zu machen :D )
dot hat geschrieben:Die Differenz zwischen LookAt und Kameraposition beschreibt die Richtung der z-Achse der Kamera. Zusammen mit dem Up-Vektor kann man über das Kreuzprodukt daraus die Richtung der x-Achse und aus der nun bekannten x und z Achse über ein weiteres Kreuzprodukt die y-Achse bestimmen.
so?
...
:?:
Sei mir nicht böse. Das hört sich gut an.... und ich würde es gerne verstehen.
Die Differenz aus zwei Positionen verstehe ich so: (x|y|z) - (x|y|z). Und ab hier sehe ich nicht mehr durch...
Ich suche ja nicht nach "relativen" Koordinaten oder Vektoren sondern ich möchte ein Objekt so ausrichten, dass es auf eine anderes zeigt. Und ich weiß nicht wie das ohne Winkel möglich ist. :?

bitte um Erhellung :roll: :D

Re: Anstiegswinkel / 3DMath / "Look At"

Verfasst: 03.05.2012, 20:58
von dot
Die Differenz zweier Punkte ist ein Vektor, der vom einen Punkt zum anderen zeigt. Die Differenz von LookAt und Kameraposition ist damit also ein Vektor, der von der Kamera in Richtung LookAt zeigt ;)

Re: Anstiegswinkel / 3DMath / "Look At"

Verfasst: 03.05.2012, 21:05
von AyJayKay
Ja, Ok, soweit komme ich mit aber bekomme ich mit diesem Vektor als "relative z-Achse" auch heraus, wie ich die Kamera drehen muss?

Re: Anstiegswinkel / 3DMath / "Look At"

Verfasst: 03.05.2012, 21:11
von dot
Viel besser, du verwendest direkt diesen Vektor um die Kamera auszurichten, indem du einfach sagst, dass dieser Vektor jetzt die z-Achse der Kamera ist ;)

Re: Anstiegswinkel / 3DMath / "Look At"

Verfasst: 03.05.2012, 21:22
von AyJayKay
Klar. Das leuchtet ein. Danke, das bringt mich auf Ideen... :)

Cool. Aber wie siehts aus wenn ich nur die Möglichkeiten Position und Rotation für ein Objekt habe. (Wie in mancher Engine, eben.) ?

Re: Anstiegswinkel / 3DMath / "Look At"

Verfasst: 03.05.2012, 21:28
von dot
Was genau meinst du damit?

Re: Anstiegswinkel / 3DMath / "Look At"

Verfasst: 03.05.2012, 21:48
von AyJayKay
Naja, den Vektor als z-Achse verwenden hab ich verstanden.

Wenn ich jedoch zu einem Objekt nur die beiden Angaben "Position" (als Vector3) und "Rotation" (als Vector3 in Grad) habe, wie es in diversen Engines der fall ist, dann will ich wieder von Vektoren zu Winkeln... (oder nicht?)

Re: Anstiegswinkel / 3DMath / "Look At"

Verfasst: 03.05.2012, 22:07
von eXile
AyJayKay hat geschrieben:Wenn ich jedoch zu einem Objekt nur die beiden Angaben "Position" (als Vector3) und "Rotation" (als Vector3 in Grad) habe, wie es in diversen Engines der fall ist, dann will ich wieder von Vektoren zu Winkeln... (oder nicht?)
Nein, willst du nicht. Du schmeißt einfach die Rotation weg, und nimmst nur die Position und \($v_\text{up} = (1, 0, 0)^T$\) für die LookAt-Matrix.

Das, was dot vorhin gesagt hat, findest du übrigens auch noch in der MSDN.

Re: Anstiegswinkel / 3DMath / "Look At"

Verfasst: 04.05.2012, 02:04
von dot
Also eine Engine die Position und Eulerwinkel als einzige Möglichkeit bietet, würd ich ganz sicher einfach nicht verwenden ;)

Re: Anstiegswinkel / 3DMath / "Look At"

Verfasst: 04.05.2012, 22:38
von AyJayKay
Ok, Vielen Dank! (trotzdem auch wegen der Winkelrechnung :) )