Как проверить, находится ли объект вне Тома отсечения в OpenGL?

Я действительно смущен преобразованием modelview OpenGL. Я понимаю все процессы преобразования, но когда дело доходит до матрицы проекции, я теряюсь : (

Если у меня есть точка P (x, y, z), как я могу проверить, будет ли эта точка нарисована на объеме отсечения, определенном либо параллельным Томом отсечения, либо перспективным Томом отсечения? Какова математическая основа этого процесса?

2 ответов


примените матрицу Модель-Вид-проекция к объекту, а затем проверьте, лежит ли он за пределами клип координата усеченной, которая определяется плоскостями:

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

так что если у вас есть точка p который является vec3 и матрицей модели-представления-проекции,M, то в GLSL это будет выглядеть так:

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

чтобы определить, будет ли данная точка видна на экране, вы протестируете ее против просмотр frustum. См. этот учебник по отбраковке frustum:

http://www.lighthouse3d.com/tutorials/view-frustum-culling/