frei bewegliche Kamera im Spiel ...
-
Ich programmiere gerade ein 3D-Spiel.
um sich ordendlich in einem 3 Dimensionalen Raum fortzubewegen braucht man ja eine frei bewegliche Kamera (Wie im Ego Shooter).Kann mir jemand eventuell erläutern, wie so eine Kamera proggen sollte?
Ein Tutorial wär auch sehr, schön(falls ihr einen Link habt).
Ich will nicht irgendwelche Code-Zeilen kopieren, ich möchte ja auch verstehen, wie es funktioniert und was ich programmiere.(Vector Klasse ist schon programmiert, beinhaltet alle nötigen Funktionen.)
-
Tc++H schrieb:
(Vector Klasse ist schon programmiert, beinhaltet alle nötigen Funktionen.)
Fein, aber Das reicht nicht. Du benötigst noch eine Koordinatentransformation. Google mal nach 'homogener Koordinaten-Transformation'.
Tutorial weiß ich keines. Das Prinzip geht's wie folgt:
Die Objekte in Deiner Welt, die in der Kamera zu sehen sein sollen, haben jedes eine Transformation bezogen auf die Welt. Transformation heißt eine Position und eine Ausrichtung. Darstellen kann man das in Form einer 4x4-Matrix[ nx ox ax px ] [ ny oy ay py ] [ nz oz az pz ] [ 0 0 0 1 ]
Die Vektoren n, o und a stehen jeweils senkrecht aufeinander und sind vom Betrag 1. p ist die Position des Objekts und n,o,a beschreiben die Ausrichtung.
Ich nenne die Lage bzw. Transformation eines Objekts bezogen auf Welt Welt_T_Obj. Die Kamera ist auch ein Objekt in diser Welt - und befinde sich bei Welt_T_Kam.
Ein Objekt bezogen auf die Kamera befindet sich dann bei
Kam_T_Obj = (Welt_T_Kam)^-1 * Welt_T_ObjFür Details ist es jetzt zu spät.
Gute Nacht
Werner
-
Ich dachte erstmal mehr an die Trigonometrie im Kreis, sodass die cam rotieren kann.
-
mach dir eine kamerastruct:
vektor: position, blickrichtung, vektordernachobenzeigtmit diesen angaben kannst du dann die szene aus dem blickwinkel der kamera rendern. um die kamera zu drehen musst du nur noch den vektor blickrichtung veränder und neu rendern, dann hast du die kamera gedreht.
-
Werner Salomon schrieb:
Tc++H schrieb:
(Vector Klasse ist schon programmiert, beinhaltet alle nötigen Funktionen.)
Fein, aber Das reicht nicht. Du benötigst noch eine Koordinatentransformation. Google mal nach 'homogener Koordinaten-Transformation'.
Tutorial weiß ich keines. Das Prinzip geht's wie folgt:
Die Objekte in Deiner Welt, die in der Kamera zu sehen sein sollen, haben jedes eine Transformation bezogen auf die Welt. Transformation heißt eine Position und eine Ausrichtung. Darstellen kann man das in Form einer 4x4-Matrix[ nx ox ax px ] [ ny oy ay py ] [ nz oz az pz ] [ 0 0 0 1 ]
Die Vektoren n, o und a stehen jeweils senkrecht aufeinander und sind vom Betrag 1. p ist die Position des Objekts und n,o,a beschreiben die Ausrichtung.
Ich nenne die Lage bzw. Transformation eines Objekts bezogen auf Welt Welt_T_Obj. Die Kamera ist auch ein Objekt in diser Welt - und befinde sich bei Welt_T_Kam.
Ein Objekt bezogen auf die Kamera befindet sich dann bei
Kam_T_Obj = (Welt_T_Kam)^-1 * Welt_T_ObjFür Details ist es jetzt zu spät.
Gute Nacht
Wernerselten so ne miese erklärung gelesen
-
Ja, das ist ja eben mein Problem.
Kamerastrukt ist klar, da glutLokkAt(eyex, eyey, eyez, posx, posy, posz, upx, upy, upz);
Wie eine Kamera Struct aufgebaut ist, weiß ich selber, ABER ich brauch eine freibeweglche Kamera.
mfg --TcH--
-
Ich hab jetzt selbst gefunden, was ich brauche, aber Danke.