在 GLSL 着色器中,我需要省略一些曲面细分补丁以显着提高性能。这些补丁是三角形,每个顶点都有给定的世界坐标。但是,当我将这些坐标转换为视锥体剔除的视图空间时,存在误差。
这是原始地形。
这就是错误在顶部影响它的方式。
这是一个有污垢的部分的特写镜头。
这些错误不仅发生在屏幕顶部,还发生在侧面和底部。这是我用来确定是否应该排除三角形的代码(在 GLSL 中)。
bool inFrustum( vec3 p,vec3 q,vec3 r) {
vec4 Pclip = camera * vec4(p, 1.0f);
vec4 Qclip = camera * vec4(q, 1.0f);
vec4 Rclip = camera * vec4(r, 1.0f);
if(((-Pclip.w>Pclip.x&&-Qclip.w>Qclip.x&&-Rclip.w>Rclip.x)|| (Pclip.x>Pclip.w&&Qclip.x>Qclip.w&&Rclip.x>Rclip.w))||
((-Pclip.w>Pclip.y&&-Qclip.w>Qclip.y&&-Rclip.w>Rclip.y)||(Pclip.y>Pclip.w&&Qclip.y>Qclip.w&&Rclip.y>Rclip.w))||
((-Pclip.w>Pclip.z&&-Qclip.w>Qclip.z&&-Rclip.w>Rclip.z)||(Pclip.z>Pclip.w&&Qclip.z>Qclip.w&&Rclip.z>Rclip.w))){
return false;
}
else{
return true;
}
}
我将不胜感激任何帮助!贝希米斯