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?
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.