ARKit –在不可见的平面下渲染3D对象

时间:2018-09-02 08:54:51

标签: swift scenekit augmented-reality arkit

我有一个带有看不见的SCNPlane的ARKit场景:

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

此平面放置在地面上,用于从场景中放置的其他对象渲染deferred shadows

我想渲染另一个SCNPlane,它应该与不可见平面处于同一水平(相同的Z坐标)。问题在于,每当新对象位于不可见平面下时,它就根本不会渲染。

当对象在不可见平面下时,有什么方法可以渲染它?

1 个答案:

答案 0 :(得分:1)

  

您可以使用以下代码行实现它:

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)