2009-02-26 9 views
3

J'utiliseprojection en perspective inverse

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, tandis que

(x,y,-1,1) 

se transforme en un point sur le plan près, et la connexion de la ligne, je peux interroger tous les objets dans la vue frustum qui croisent la ligne. Après la transformation, je divise les points résultants par leur composante .w respective. Cela fonctionne pour le plan lointain, mais le point sur le plan proche est en quelque sorte transformé en l'origine de l'espace mondial.

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

+0

Je pense que vous avez besoin de plus d'exemples de code. Surtout la partie qui définit votre point de départ à l'origine –

+0

Aussi, pourriez-vous fournir la matrice de projection que vous utilisez? Est-ce compensé? – Coincoin

Répondre

4

Je sais que ce n'est qu'une solution de contournement, mais vous pouvez déduire le point de plan proche en utilisant uniquement le point éloigné et la position de visualisation.

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

Comme pour vous le vrai problème. D'abord, n'oubliez pas de diviser par W! Aussi, 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 
+0

oui, je l'ai considéré, mais maintenant je suis intéressé par le côté mathématique du problème original;) ​​ – heeen

+0

Hehe, ouais désolé à ce sujet. J'ai mis à jour ma réponse pour essayer de résoudre votre vrai problème. – Coincoin