ARKit - рендеринг трехмерного объекта под невидимой плоскостью - PullRequest
0 голосов
/ 02 сентября 2018

У меня есть сцена ARKit с невидимым SCNPlane:

plane.geometry?.firstMaterial?.colorBufferWriteMask = []

Эта плоскость находится на земле и используется для визуализации deferred shadows от других объектов, находящихся на сцене.

Я хочу визуализировать другой SCNPlane, который должен находиться на том же уровне, что и невидимая плоскость (та же координата Z). Проблема в том, что каждый раз, когда новый объект находится под невидимой плоскостью, он вообще не отображается.

Есть ли способ визуализировать объект, когда он находится под невидимой плоскостью?

1 Ответ

0 голосов
/ 02 сентября 2018

Вы можете достичь этого, используя следующие строки кода:

shadowsPlane.geometry?.materials.first?.writesToDepthBuffer = true

Выберите одно из двух свойств экземпляра для .colorBufferWriteMask:

shadowsPlane.geometry?.materials.first?.colorBufferWriteMask = .alpha
// OR:
shadowsPlane.geometry?.materials.first?.colorBufferWriteMask = SCNColorMask(rawValue: 0)

Установите порядок рендеринга для ваших объектов, например:

shadowsPlane.renderingOrder = -1   // the nearest layer
shadowsPlane.renderingOrder = 100  // the farthest layer

И, конечно же, используйте соответствующее .lightingModel свойство экземпляра:

shadowsPlane.geometry?.materials.first?.lightingModel = .constant 

Помните, что между двумя самолетами будет небольшой воздушный зазор:

shadowsPlane.position = SCNVector3(x: 0, y: 0, z: 0)
floorPlane.position = SCNVector3(x: 0, y: -0.01, z: 0)
...