Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Dalon

Frischling

  • »Dalon« ist der Autor dieses Themas

Beiträge: 81

Wohnort: Berlin

Beruf: Freiberufler

  • Private Nachricht senden

1

07.02.2013, 11:09

Projektion eines 3D Vektor auf einen anderen

Hallo!

Ich weiß, diese Frage ist eigentlich trivial und doch stelle ich sie :) Es geht mir um die Projektion eines 3D Vektors auf einen anderen. Erstmal ein wenig Kontext (wofür brauche ich das?):

Ich habe ein 3rd Person Kamerasystem. Soweit so gut. Nun soll aber garantiert sein, dass meine Kamera immer freies Sichtfeld auf das Ziel (den Charakter) hat. Zunächst habe ich dafür einen
Strahl abgeschossen, vom Charakter zur Kamera (bzw. genauer gesagt habe ich die Screen-Space-Koordinaten der Bildschirmmitte in Weltkoordinaten umgerechnet). Das klappt soweit ganz gut.
Nun wird geprüft ob der Strahl etwas trifft und wenn ja, wird die Kameraposition entsprechend korrigiert (näher heranzoomen) so dass der Charakter im Sichtfeld ist.

Dummerweise ist das nicht absolut korrekt. Denn die Kamera kann teilweise halb in den Boden gucken, da ja nur geprüft wird, ob der direkte Weg bis zur Kamera (eigentlich 1 unit mehr als bis zur Kameraposition)
frei ist. Man kann also zur Hälfte in Wände und Boden hineingucken.

Mein Lösungsansatz wäre nun, nicht einen, sondern 5 Strahlen abzufeuern. In jede Bildschirmecke einen (-1,-1) (1,1) (1,-1) (-1,1) und natürlich auch einmal in die Bildschirmmitte. Das würde soweit funktionieren,
nehme ich an (noch nicht getestet), wenn da nicht das Problem wäre, dass die Distanz zum Ziel mit dem kolldiiert wird nicht der Kameraposition entspricht. Ich will also den Vektor des Strahls (bis zum Kollisionspunkt)
auf den direkten Vektor des Strahls projizieren, um die tatsächliche Kamerazoom-Position zu berechnen.

Wie mache ich das am besten? :D

Also nochmal kurz:
* 2 3D-Vektoren
* Selber Ursprungspunkt.
* Nicht normalisiert
* Ich möchte Vektor B (player -> kollisionspunkt) auf Vektor A (player -> bildschirmmitte in world space) projiziert haben.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

07.02.2013, 11:23

Um Vektor B auf Vektor A zu projizieren, berechne das Skalarprodukt aus dem normierten A-Vektor und dem nicht normierten B-Vektor.
Das Ergebnis (= eine Zahl) multiplizierst du mit dem normierten A-Vektor.
Jetzt hast du einen Vektor, der parallel zu A ist und dessen Länge der von B auf A projizierten Länge entspricht.

Dalon

Frischling

  • »Dalon« ist der Autor dieses Themas

Beiträge: 81

Wohnort: Berlin

Beruf: Freiberufler

  • Private Nachricht senden

3

07.02.2013, 12:41

Danke David :D

Werbeanzeige