Как проверить, находится ли объект вне обтравочного тома в OpenGL? - PullRequest
7 голосов
/ 10 июня 2011

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

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

Ответы [ 2 ]

14 голосов
/ 14 июня 2011

Примените матрицу проекции модель-вид к объекту, а затем проверьте, находится ли она за пределами координатного усечения клипа, которое определяется плоскостями:

    -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;
    }
2 голосов
/ 10 июня 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...