如何在OpenGL中检查对象是否位于剪切卷之外?

Cha*_*han 7 opengl clipping frustum

我对OpenGL的模型视图转换感到困惑.我理解所有的转换过程,但是当谈到投影矩阵时,我迷失了:(

如果我有一个点P(x,y,z),我该如何检查这个点是否会在由平行剪裁体积或透视剪裁体积定义的剪裁体积上绘制?这个过程背后的数学背景是什么?

Mik*_*ola 13

将模型 - 视图 - 投影矩阵应用于对象,然后检查它是否位于由平面定义的剪辑坐标平截头体之外:

    -w < x < w
    -w < y < w
     0 < z < w
Run Code Online (Sandbox Code Playgroud)

因此,如果你有一个pvec3 点和一个模型 - 视图 - 投影矩阵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;
    }
Run Code Online (Sandbox Code Playgroud)