我有一个带有看不见的SCNPlane
的ARKit场景:
plane.geometry?.firstMaterial?.colorBufferWriteMask = []
此平面放置在地面上,用于从场景中放置的其他对象渲染deferred shadows
。
我想渲染另一个SCNPlane
,它应该与不可见平面处于同一水平(相同的Z
坐标)。问题在于,每当新对象位于不可见平面下时,它就根本不会渲染。
当对象在不可见平面下时,有什么方法可以渲染它?
答案 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)