Servus, es geht zwar nicht um die Programmierung eines Spiels, aber um ein Thema, das besonders in diesem Bereich zu finden ist, daher schreib ich das mal hier rein, hoffe das passt
Also, folgende Situation: Ich habe eine Kamera mit einer Position im 3-dimensionalen Raum, sowie einen Richtungsvector, der aufzeigt in welche Richtung die Kamera gerade schaut. Diese Kamera hat ein variables Sichtfeld, sagen wir mal 90° in die Breite, also in jede Richtung 45, und 60° in die Höhe.
Dann hab ich noch einen Punkt mit eine Position, und jetzt will ich wissen wo auf dem Bildschirm sich dieser Punk befindet. Dafür habe ich jetzt 2 Winkel ausgerechnet, den zwischen dem Richtungsvektor der Kamera und dem Punkt mit der Kamera als Ursprung, auf der xy- Ebene um die x-Koordinate des Punktes auf dem Bildschirm zu bestimmen, und das gleiche auf der yz-Ebene um die y-Koordinate zu bestimmen. Das Verhältnis der Winkel zu den 45° bzw. 30° habe ich dann auf den Bildschirm übertragen. Ich hoffe bisher kann mir jeder folgen.
Das funktioniert jetzt allerdings nur sehr bedingt, denn nur mit den Winkeln kann der Punkt ja sowohl links, als auch rechts, bzw. ober- und unterhalb der Richtungsvektors der Kamera liegen. Wie kann ich jetzt möglichst ressourcensparend festlegen wo genau der Punkt jetzt am Bildschirm hin muss?
Meine Idee war es einen weiteren Vektor festzulegen, der die obere, linke Ecke des Sichtfeldes der Kamera beschreibt und dann, je nachdem ob der Winkel des Punktes zu diesem Vektor größer oder kleiner als zum Richtungsvektor der Kamera ist, kann man erkennen in welches "Quartal" des Bildschirms der Punkt gehört. Allerdings klingt das nicht sehr effektiv und mir fehlen leider die entsprechenden Formeln um diesen zweiten Vektor zu bestimmen
Also gibt es hier eine bessere Lösung? Oder kennt jemand sogar allgemein für die Ganze Geschichte einen schöneren Weg?
Kurz zusammengefasst: Ich will eigentlich nur Punkte in einem 3-dimensionalen Koordinatensystem auf einen 2-dimensionalen Bildschirm übertragen.
Grüße M
Also, folgende Situation: Ich habe eine Kamera mit einer Position im 3-dimensionalen Raum, sowie einen Richtungsvector, der aufzeigt in welche Richtung die Kamera gerade schaut. Diese Kamera hat ein variables Sichtfeld, sagen wir mal 90° in die Breite, also in jede Richtung 45, und 60° in die Höhe.
Dann hab ich noch einen Punkt mit eine Position, und jetzt will ich wissen wo auf dem Bildschirm sich dieser Punk befindet. Dafür habe ich jetzt 2 Winkel ausgerechnet, den zwischen dem Richtungsvektor der Kamera und dem Punkt mit der Kamera als Ursprung, auf der xy- Ebene um die x-Koordinate des Punktes auf dem Bildschirm zu bestimmen, und das gleiche auf der yz-Ebene um die y-Koordinate zu bestimmen. Das Verhältnis der Winkel zu den 45° bzw. 30° habe ich dann auf den Bildschirm übertragen. Ich hoffe bisher kann mir jeder folgen.
Das funktioniert jetzt allerdings nur sehr bedingt, denn nur mit den Winkeln kann der Punkt ja sowohl links, als auch rechts, bzw. ober- und unterhalb der Richtungsvektors der Kamera liegen. Wie kann ich jetzt möglichst ressourcensparend festlegen wo genau der Punkt jetzt am Bildschirm hin muss?
Meine Idee war es einen weiteren Vektor festzulegen, der die obere, linke Ecke des Sichtfeldes der Kamera beschreibt und dann, je nachdem ob der Winkel des Punktes zu diesem Vektor größer oder kleiner als zum Richtungsvektor der Kamera ist, kann man erkennen in welches "Quartal" des Bildschirms der Punkt gehört. Allerdings klingt das nicht sehr effektiv und mir fehlen leider die entsprechenden Formeln um diesen zweiten Vektor zu bestimmen
Also gibt es hier eine bessere Lösung? Oder kennt jemand sogar allgemein für die Ganze Geschichte einen schöneren Weg?
Kurz zusammengefasst: Ich will eigentlich nur Punkte in einem 3-dimensionalen Koordinatensystem auf einen 2-dimensionalen Bildschirm übertragen.
Grüße M