2013-03-02 3 views
0

Je rends un cube avec 8 sommets. Au fur et à mesure que je tourne ou que je me rapproche du cube, certains sommets peuvent être écrêtés par le plan de coupure proche. Cependant, pour une raison quelconque dans mon problème, j'ai besoin de trouver les points d'intersection sur les bords du cube avec le plan de coupure proche. Je sais que le nombre de points peut varier. Donc, ce que je pensais obtenir le plan de coupure proche (probablement dans l'espace oculaire - mais COMMENT?) Et faire un calcul inverse des matrices pour obtenir les coordonnées dans l'espace objet de mon cube, alors je peux trouver les intersections et résoudre mon problème. Mais le problème ici est:comment obtenir les coordonnées du plan de découpage proche dans la coordonnée d'espace objet dans OpenGL

  1. Comment obtenir les coordonnées pour chaque coin du plan de coupure proche? (ou les coefficients de l'équation plane)
  2. Comment revenir à l'espace objet?

Test:

Comme un test pour voir si je peux obtenir les coordonnées correctement j'essayé: Ce que j'ai essayé de faire était d'obtenir l'inverse de MVM (MODELVIEW Matrix) et PM (Projection Matrice). Et essayé d'imaginer le plan de coupure proche ayant V1 = (-1, -1, -1,1), V2 = (1, -1, -1, 1), V3 = (1, 1, -1, 1) , et V4 = (-1, 1, -1, 1) coordonnées. Donc, je pensais si je fais cela pour chacun des quatre sommets:

V1 = IMVM * (IPM * V1);

V2 = IMVM * (IPM * V2);

V3 = IMVM * (IPM * V3);

V4 = IMVM * (IPM * V4); Où IMVM est l'inverse de la matrice modèle-vue et IPM est l'inverse de la matrice de projection. Puis moi quand je rends ces quatre points avec des matrices actuellement chargées (que j'ai juste utilisé l'inverse de), je devrais avoir un carré debout devant mon écran puisque mes multiplications inverses auraient dû être annulées par la multiplication avec openGL actuellement chargé matrices. Mais pour une raison quelconque cela ne marche pas et j'ai essayé de le transposer et normal. J'ai fait attention à être colonne major, etc. Mais il semble que ça ne marche pas et au lieu d'obtenir un suqare (représentant mon plan de coupure proche) je reçois un avion qui bouge constamment et saute partout !!

+0

http://www.scratchapixel.com/lessons/3d-basic-rendering/computing-pixel-coordinates-of-3d-point – user18490

Répondre

0

Eh bien, il semble que toutes mes questions sur ce forum va être répondu par moi-même! Tout d'abord après y avoir réfléchi, j'ai réalisé que nous n'avions pas besoin de l'inverse de la matrice de projection. Nous désignons les points dans l'espace de la caméra et pour les ramener à l'espace objet, nous avons juste besoin de l'inverse de la matrice modelview.

Comme toujours avec les erreurs qui vous tuent, il y avait une erreur logique dans mon calcul de multiplication de matrice vectorielle. Quand j'ai revérifié avec une calculatrice matricielle en ligne j'ai réalisé que mon premier élément est correct mais le reste des éléments est incorrect. C'est quand il m'a frappé que je stocke les résultats dans la même matrice que je me multiplie et je suis juste en train de modifier la matrice originale en conséquence. Donc, j'ai juste ajouté une nouvelle matrice pour les résultats et tout a bien fonctionné. Fondamentalement, j'ai désigné un point et je l'ai multiplié par l'inverse de la matrice modèle-vue pour obtenir les points dans la coordonnée de l'espace objet.

Questions connexes