Как проверить, находится ли объект вне Тома отсечения в 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: