SceneKit - Отбор окклюзии

Я играл в SceneKit на iOS 8 довольно давно, и недавно я столкнулся с ситуацией, в которой мне нужно определить, не появляется ли узел в окне просмотра. Отбор окклюзии может быть возможным решением. Таким образом, есть ли какой-либо вариант отбора окклюзии, доступный в SceneKit, и если нет, какие еще предложения я бы хотел попробовать? Спасибо!

2 ответа

Решение

isNodeInsideFrustum:withPointOfView: Метод сообщает вам, находится ли узел внутри поля зрения камеры, но не сообщает вам, перекрыт ли он другой геометрией сцены.

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

Тестирование попаданий не даст вам предельной детализации (например, будут ли визуализированы пиксели одного узла позади пикселей других узлов), но этого может быть достаточно для того, что вам нужно. Вы можете немного улучшить чувствительность тестирования удара с помощью options параметр и выбрав, какие точки для тестирования - например, только центр целевого узла или углы его ограничительной рамки. Тестирование попаданий также приводит к снижению производительности процессора, поэтому вам нужно найти правильный компромисс между функциональностью, которую вы хотите, и вашей целевой частотой кадров.

SCNView через протокол SCNSceneRenderer реализует isNodeInsideFrustum:withPointOfView:

Это позволяет вам проверить, виден ли узел с данной камеры.

https://developer.apple.com/library/mac/documentation/SceneKit/Reference/SCNSceneRenderer_Protocol/Reference/SCNSceneRenderer.html:

Другие вопросы по тегам