Frage

Ich bin mit

worldview_inverse * (projection_inverse * vector)

Bildschirmraum zu verwandeln Koordinaten in Weltraumkoordinaten. Ich nahm an,

(x,y,1,1)

zu einem Punkt auf der weiten Ebene verwandeln würde, während

(x,y,-1,1)

transformiert zu einem Punkt auf der nahen Ebene und verbinden die Linie, die ich alle Objekte in dem Sichtstumpfs abfragen kann, die die Linie schneiden. Nach der Transformation dividieren I die resultierenden Punkte durch ihre jeweilige .W-Komponente. Dies funktioniert für die weit Ebene, aber der Punkt auf der nahen Ebene wird irgendwie in der Welt Raum Ursprung umgewandelt.

Ich denke, das mit den w Komponenten von 1 zu tun hat, ich in die inversen Projektion bin Fütterung, weil es in der Regel 1 vor der Projektion ist, nicht nach, und ich bin das Gegenteil Projektion zu tun. Was mache ich falsch?

War es hilfreich?

Lösung

Ich weiß, dass dies nur ein Problem zu umgehen, aber Sie können nur mit dem Fernpunkt und die Betrachtungsposition des nahe Ebene Punkt abzuleiten.

near_point = view_position
           + (far_point - view_position) * (near_distance / far_distance)

Was Sie echtes Problem. Erstens, vergessen Sie nicht von W zu teilen! Auch je nach Projektionsmatrix, haben Sie versucht, (x, y, 0,1) im Gegensatz zu z = -1.

near_point = worldview_inverse * (projection_inverse * vector)
near_point /= near_point.W
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top