Comment vérifier si un objet réside en dehors du volume de découpage en OpenGL?
Question
Je suis vraiment confus au sujet de la transformation de modelview OpenGL. Je comprends tous les processus de transformation, mais quand il vient à la matrice de projection, je suis perdu: (
Si j'ai un point P (x, y, z), comment puis-je vérifier si ce point sera établi sur un volume de découpage défini soit par en volume de découpage parallèle ou le volume de découpage en perspective? Quel est l'arrière-plan mathématique de ce processus?
La solution
Appliquer la matrice modèle-vue-projection de l'objet, puis vérifier si elle se trouve en dehors du plan de coordonnées tronconique, qui est définie par les plans:
-w < x < w
-w < y < w
0 < z < w
Donc, si vous avez un point p
qui est un vec3, et une matrice modèle-vue-projection, M
, puis en GLSL il ressemblerait à ceci:
bool in_frustum(mat4 M, vec3 p) {
vec4 Pclip = M * vec4(p, 1.);
return abs(Pclip.x) < Pclip.w &&
abs(Pclip.y) < Pclip.w &&
0 < Pclip.z &&
Pclip.z < Pclip.w;
}
Autres conseils
Pour déterminer si un point donné sera visible à l'écran, vous testez contre le affichage frustum . Voir ce tutoriel culling frustum:
http://www.lighthouse3d.com/tutorials/view-frustum-culling /