Frage

Heyo,

Im Moment arbeite ich an einem Projekt, bei dem ich die Kamera, so dass die volle Bewegung eines Charakters sichtbar wäre vergeben müssen, ohne die Kamera zu bewegen. Ich habe die Position, wo die Zeichen beginnen, sowie den maximalen Abstand, dass die Zeichen in allen drei Richtungen reisen (X, Y, Z &). Ich habe auch das Sichtfeld (das ist 90 Grad).

Gibt es eine Gleichung, die herausfinden würde, wo ich die Kamera platzieren müssen, damit es nicht die volle Bewegung zu sehen, bewegen muß?

. Hinweis: Dies ist OpenGL mit

Zur Verdeutlichung: Die Kamera sollte „vor“ des Charakters sein, die in der Bewegung ist, nicht über

.

Es wird auch entlang einer Grundebene bewegen.

War es hilfreich?

Lösung

Wenn Sie eine Begrenzungskugel der Punkte machen, alles, was Sie tun müssen, ist die Kamera hält in einem Abstand größer oder gleich den Radius der Begrenzungskugel / sin (FOV / 2).

Zum Beispiel, wenn Sie eine Begrenzungskugel mit Radius Radius haben, und ein bestimmtes Sichtfeld FOV, Ihre Kamera muss nur an einem Punkt „Dist“ weg sein, zeigte in Richtung der Mitte der Begrenzungskugel.

Die Gleichung den Abstand für die Berechnung ist: Dist = Radius / sin (FOV / 2);

Dies wird in 3D arbeiten, für eine Kamera in jeder Orientierung.

Andere Tipps

, die einfach den maximalen Bereich von (X, Y, Z) nicht von sich aus ausreichend, weil die Sichtöffnung im wesentlichen förmigen Pyramide ist, wobei die Spitze der Pyramide an der Augenposition zu sein.

Aus Gründen der Argumentation, nehmen sie an, dass alle Bewegung in dem (X, Z) -Ebene (das heißt die Masse) und das Auge ist direkt über dem Ursprung 10m entlang der Y-Achse.

ein quadratisches Bildfenster Unter der Annahme, mit 90˚ Sichtfeld werden Sie in der Lage sein, von ± 10 m zu sehen, sowohl entlang der X- und Z-Achse, sondern nur für Objekte, die auf dem Boden sind (Y = 0). Sobald sie den Boden Ihrer Sicht reduziert sich lösen. Wenn es 1 m von dem Boden dann (X, Z) Ausmaß ist nur ± 9m.

Offensichtlich eine echte Kamera ohnehin in der Szene platziert werden kann, jede Richtung. Selbst die „Rolle“ Winkel der Kamera könnte sich ändern, wie viel sichtbar ist. Es gibt tatsächlich unendlich viele solche Kamera Punkte, so müssen Sie Ihre Kriterien ein wenig begrenzen.

Nehmen Sie das Liniensegment vom Startpunkt bis zum Endpunkt. Konstruieren einer Ebene orthogonal zu diesem Liniensegment durch den Mittelpunkt des Liniensegments. Dann positioniert die Kamera irgendwo in dieser Ebene in einem Abstand von mehr als die folgenden aus dem Schnittpunkt der Ebene und die Leitung an dem Schnittpunkt suchen. Der Aufwärtsvektor der Kamera in der Ebene sein muss und das horizontale Sichtfeld muss 90 Grad sein.

distance = sqrt(dx^2 + dy^2 + dz^2) / 2

Diese Kamerapositionen werden alle haben den Start und den Endpunkt auf der linken oder rechten Rand des Viewport und verticaly zentriert ist.

Ein andere Lösung könnte sein, eine Funktion zu schreiben, die den Start nimmt, den Endpunkt, und die gewünschte Position beiden Punkte auf dem Bildschirm. Dann lösen Sie einfach die Projektionsgleichung für die Kamera-Transformation.

Es hängt davon ab, zum Beispiel, wenn das Objekt Gonna bewegt sich in einer Ebene ist, können Sie legen einfach die Kamera außerhalb einer Kugel seines Bewegungsbereiches umschrieben (dies hängt von der Tatsache, dass FOV 90 ist, was ein glücklicher Winkel).

Wenn das Objekt Gonna bewegen sich in 3D, ist es viel schwieriger. Es würde helfen, wenn Sie die Region angeben würde, wo sich das Objekt bewegt (Würfel gegen Ball ...) und die Richtung Sie es von sehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top