我真的对OpenGL的modelview转换感到困惑。我了解所有的转换过程,但是当涉及到投影矩阵时,我会迷失:(

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

最佳答案

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

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

因此,如果您有一个点 p 是一个 vec3 和一个模型- View -投影矩阵 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;
    }

关于opengl - 如何检查对象是否位于OpenGL中的裁剪空间之外?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6301085/

10-11 22:52