Threejs: отключить отбраковку усеченного конуса для некоторых объектов

Чтобы решить проблему z-боев, я ограничил ближнюю и дальнюю камеры небольшим диапазоном. Но когда я хочу добавить более крупный объект, он был отбракован с помощью frustum вида.

Я пробовал свойство object3d.frustumCulled , не работает object3d.frustumCulled , причина в следующем: https://github.com/mrdoob/three.js/issues/12170

Итак, есть ли способ гарантировать, что некоторые конкретные объекты не будут забиваться, не меняя камеру рядом и далеко? СПАСИБО.

Всего 1 ответ


Отбраковка не означает, что объект нарисован или нет. Он может быть нарисован или не нарисован в зависимости от того, где он находится. Это оптимизация, которая пытается сказать что-то вроде этого:

Эй, у меня есть действительно дешевый чек (пересечение плоскости / сферы), который я могу сделать и сказать вам, если вам нужно попытаться нарисовать это вообще.

Таким образом, вы делаете дешевый чек, и если объект гарантированно полностью выходит из усеченного конуса, вы никогда не выполняете вызов отрисовки. Если он пересекается, вы должны выполнить вызов отрисовки, но вы все равно можете ничего не видеть, если на самом деле ни один из треугольников не находится в усеченном конусе.

Если вы скачаете что-то вроде specter.js и осмотрите вызовы отрисовки, вы увидите, что с frustumCulled = false вы получите отрисовку для каждого объекта в вашей сцене. Ваш экран может быть пустым.


Есть идеи?

10000