Frustum забой, когда габаритный Box действительно большой
Когда ограничивающий бокс все 8 вершина из стороны усеченным, она не будет оказана. Но если это произошло, как показано выше. Этот объект должен находиться в списке отображения. Есть идеи?
Frustum забой, когда габаритный Box действительно большой
Когда ограничивающий бокс все 8 вершина из стороны усеченным, она не будет оказана. Но если это произошло, как показано выше. Этот объект должен находиться в списке отображения. Есть идеи?
Потому что вы вычисляете пересечение, как будто поле представляет собой кучу точек, а не пучок строк. Это, как я делаю это в псевдокоде:
inter = Inside
for (plane : frustum) {
verts[2] = findOpposingPointsMostPerpendicularToPlane(box, plane)
near = plane.signedDistance(verts[0]) > 0.0
far = plane.signedDistance(verts[1]) > 0.0
if (!near && !far)
inter = Outside
break
else (near^far)
inter = Intersecting
}
Если окно является AABB, вы создаете статический массив индексов вершин для findOpposingPointsMostPerpendicularToPlane()
, а затем сопоставить их с помощью знака плоских нормальных компонентов.
Вычислите ограничительную сферу из своего bbox и проверьте расстояние по центру от каждой из 6 плоскостей усеченного конуса. Если один из них меньше радиуса сферы, включите свой объект в список отображения.
Спасибо, это более легкое решение;) – sindney
Он также даст ложные срабатывания. Если BB тощий, ограничивающая сфера может иметь объем в сотни раз больше BB. BB (в общем) приближение, теперь вы приближаетесь к приближению ... – cmannett85
Да, вы правы, только что поняли неправильный результат при расчете как bbox, так и bsphere для Plane Mesh. – sindney