В шейдере 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;
}
}
Буду очень признателен за любую предоставленную помощь! Бегемиф