Frage

Ich wünsche Strahlen von der Kamera durch die Betrachtungsebene zu erzeugen. Um dies zu tun, ich brauche meine Kameraposition ( „Auge“), die nach oben, nach rechts und in Richtung Vektoren (wobei in Richtung der Vektor von der Kamera in Richtung des Objekts, dass die Kamera bei der Suche) und P, der Punkt auf der Betrachtungsebene. Sobald ich diese habe, dass der Strahl erzeugt lautet:

ray = camera_eye + t*(P-camera_eye);

wobei t der Abstand entlang des Strahls (nehmen t 1 für jetzt =).

Meine Frage ist, wie bekomme ich die 3D-Koordinaten des Punktes P gegeben, dass es an der Position (i, j) auf der Betrachtungsebene liegt? Es sei angenommen, daß die oberen linken und unteren rechten Ecken der Betrachtungsebene gegeben sind.

Hinweis: Die Betrachtungsebene ist nicht wirklich ein Flugzeug in dem Sinne, dass sie nicht unendlich in alle Richtungen erstreckt. Vielmehr kann man von dieser Ebene denken als widthxheight Bild. In x-Richtung, ist der Bereich von 0 -> Breite und in der y-Richtung ist der Bereich von 0 -> Höhe. Ich wünsche, die 3D-Koordinaten des (i, j) -te Element zu finden, 0     

War es hilfreich?

Lösung 3

Wenn ich direkt in vorgeschlagenen Formeln in mein Programm gesteckt, ich nicht korrekte Ergebnisse erhalten hätte (vielleicht einige Debugging getan werden müssen). Mein anfängliches Problem schien in dem Mißverständnis der (x, y, z) Koordinaten der Interpolations-Eckpunkten zu sein. Ich war die Behandlung von x, y, z-Koordinaten getrennt, wo ich nicht (und dies kann die spezifisch für die Anwendung, da die Kamera in jeder beliebigen Richtung ausgerichtet sein). Stattdessen wurde die Lösung eine einfache Interpolation der Eckpunkt der Betrachtungsebene sein aus:

  • interpoliert die unteren Eckpunkte in der i-Richtung P1 erhalten
  • interpoliert die oberen Eckpunkte in der i-Richtung P2 erhalten
  • interpoliert P1 und P2 in der j-Richtung, um die Weltkoordinaten des Endpunktes zu bekommen

Andere Tipps

Allgemeine Lösung des itnersection einer Linie und einer Ebene finden Sie unter http : //local.wasp.uwa.edu.au/~pbourke/geometry/planeline/

Ihre Grafik lib (OpenGL / DirectcX usw.) kann eine standardisierte Möglichkeit haben diese

zu tun

edit: Sie versuchen die 3D-Kreuzung eines Bildschirmpunktes (zB einer Maus) mit einem 3D-Objekt in Ihnen Szene zu finden?

Um herauszufinden, P, müssen Sie die Entfernung von der Kamera auf die nahe Clipping-Ebene (der Bildschirm), die Größe des Fensters auf der nahen Clipping-Ebene (oder den Blickwinkel, können Sie die Fenstergröße von der Arbeit aus Blickwinkel) und die Größe des gerenderten Fenster.

  1. Scale die Bildschirmposition auf den Bereich -1
  2. Scale normalisiert x, y durch das Sichtfenster Größe
  3. Scale nach rechts und nach oben Vektoren der Kamera und die Ergebnisse zusammenzufassen
  4. Fügen Sie den Blick auf Vektor durch die Clipping-Ebene Abstand skaliert

In der Tat erhalten Sie:

p = at * near_clip_dist + x * right + y * up

, wobei x und y sind:

x = (screen_x - screen_centre_x) / (width / 2) * view_width
y = (screen_y - screen_centre_y) / (height / 2) * view_height
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top