Matrix 基于视图矩阵的截锥剔除

Matrix 基于视图矩阵的截锥剔除,matrix,glsl,frustum,culling,Matrix,Glsl,Frustum,Culling,在GLSL着色器中,我需要省略一些细分面片以大幅提高性能。这些面片是三角形,每个顶点具有给定的世界坐标。但是,当我将这些坐标转换为视图空间以进行平截头体剔除时,会有一定的误差 这是原始地形 这就是错误在顶部对它的影响 这是一个有灰尘的部分的特写 这些错误通常发生在屏幕的顶部,但也发生在侧面和底部。 下面是我用来确定是否应该排除三角形(在GLSL中)的代码 我将非常感谢任何帮助! Behemyth在我的着色器中,我使用以下方法来剔除面片: bool visible(vec3 vert) {

在GLSL着色器中,我需要省略一些细分面片以大幅提高性能。这些面片是三角形,每个顶点具有给定的世界坐标。但是,当我将这些坐标转换为视图空间以进行平截头体剔除时,会有一定的误差

这是原始地形

这就是错误在顶部对它的影响

这是一个有灰尘的部分的特写

这些错误通常发生在屏幕的顶部,但也发生在侧面和底部。 下面是我用来确定是否应该排除三角形(在GLSL中)的代码

我将非常感谢任何帮助!
Behemyth

在我的着色器中,我使用以下方法来剔除面片:

bool visible(vec3 vert)
{
    int clipoffset = 5; //a bit offset because of displacements
    vec4 p = MVP*vec4(vert,1);
    return !(( p1.x < -(p1.w+clipoffset))||
            ( p.x >  (p.w+clipoffset))||
            ( p.y < -(p.w+clipoffset))||
            ( p.y >  (p.w+clipoffset))||
            ( p.z < -(p.w+clipoffset))||
            ( p.z >  (p.w+clipoffset)));
}
编辑:在您的代码中,可能是(and)
|
运算符导致了问题,请尝试在每一条语句后不使用括号:

if(S1||S2||S3||S4) 
而不是

if((S1||S2)||(S3||S4))

编辑::嗯……我还没有看它被问到的日期,不知道我是怎么找到它的……O.O

我很感谢在这篇文章中付出的努力。我无意中通过创建路径跟踪渲染器绕过了这个问题。由于这个问题在我这方面从未真正得到解决,所以这个问题是一个很好的答案。谢谢你的帮助!
if(S1||S2||S3||S4) 
if((S1||S2)||(S3||S4))