如何检查对象是否位于OpenGL中的裁剪空间之外?

| 我真的对OpenGL的modelview转换感到困惑。我了解所有的转换过程,但是当涉及到投影矩阵时,我迷路了:( 如果我有一个点P(x,y,z),如何检查该点是在由平行修剪量还是透视修剪量定义的修剪量上绘制?这个过程背后的数学背景是什么?     
已邀请:
        将model-view-projection矩阵应用于对象,然后检查它是否位于由平面定义的剪辑坐标视锥中:
    -w < x < w
    -w < y < w
     0 < z < w
因此,如果您有一个点vѭ3的点
p
和一个模型视图投影矩阵matrix2ѭ,那么在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;
    }
    
        要确定给定的点在屏幕上是否可见,请对照视锥进行测试。请参阅此平截头体剔除教程: http://www.lighthouse3d.com/tutorials/view-frustum-culling/     
        对于任何依赖已接受答案的人来说,这是不正确的(至少在当前的实现中)。 z平面中的OpenGL剪辑与x和y相同,如-w

要回复问题请先登录注册