Примените матрицу проекции модель-вид к объекту, а затем проверьте, находится ли она за пределами координатного усечения клипа, которое определяется плоскостями:
-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;
}