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