Question

J'utilise

worldview_inverse * (projection_inverse * vector)

pour transformer l'espace de coordonnées d'écran en coordonnées spatiales du monde. Je suppose que

(x,y,1,1)

transformerait en un point sur le plan loin, alors que

(x,y,-1,1)

se transforme en un point sur le plan proche, et reliant la ligne I peut interroger tous les objets dans la vue tronquée qui coupent la ligne. Après la transformation je divise le point résultant de leur composant respectif .w. Cela fonctionne pour l'extrême-plan, mais le point sur le plan près se transforme en quelque sorte à l'origine spatiale mondiale.

Je pense que cela a à voir avec les composants w de 1 Je suis alimentation dans la projection inverse, car il est généralement 1 avant la projection, et non après, et je fais la projection inverse. Qu'est-ce que je fais mal?

Était-ce utile?

La solution

Je sais que ce n'est une solution de contournement, mais vous pouvez en déduire le point d'avion près en utilisant uniquement le point jusqu'à présent et la position de visualisation.

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

Quant à vous vrai problème. Tout d'abord, ne pas oublier de diviser par W! En outre, en fonction de votre matrice de projection, avez-vous essayé (x, y, 0,1), par opposition à z = -1.

near_point = worldview_inverse * (projection_inverse * vector)
near_point /= near_point.W
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top