¿Cómo verificar si un objeto se encuentra fuera del volumen de recorte en OpenGL?

StackOverflow https://stackoverflow.com/questions/6301085

  •  22-10-2019
  •  | 
  •  

Pregunta

Estoy realmente confundido sobre la transformación ModelView de OpenGL. Entiendo todos los procesos de transformación, pero cuando se trata de matriz de proyección, estoy perdido :(

Si tengo un punto p (x, y, z), ¿cómo puedo verificar si este punto se dibujará en un volumen de recorte definido por volumen de recorte paralelo o volumen de recorte de perspectiva? ¿Cuál es el trasfondo matemático detrás de este proceso?

¿Fue útil?

Solución

Aplique la matriz de proyección de visión del modelo al objeto, luego verifique si se encuentra fuera del clip coordenen frustum, que está definido por los planos:

    -w < x < w
    -w < y < w
     0 < z < w

Entonces, si tienes un punto p que es un vec3 y una matriz de proyección de visión modelo, M, luego en GLSL se vería así:

    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;
    }

Otros consejos

Para determinar si un punto dado será visible en la pantalla, lo pruebe con el Viendo frustum. Vea este tutorial de sacrificio frustum:

http://www.lighthouse3d.com/tutorials/viewfrustum-culling/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top