我在SCNView中有一个SCNScene渲染。我有一些在场景中渲染/移动的* .dae模型。
我有一个透明的立方体,当我的一个模型落后于它时,我希望模型不会被渲染,因为此刻,由于立方体是透明的,你可以通过立方体看到它。
是否有任何属性/设置/着色器可以应用于透明立方体,以便其后面的任何内容都不会呈现?
示例:
我的眼睛是绿点,立方体是蓝色方块,我的模型是红色圆圈,然而被立方体隐藏的圆圈部分是紫色......这实际上是不可见的。蓝色方块也是看不见的。
这位开发人员有一个遮挡着色器可以满足我的需要,但它的Unity:https://youtu.be/MK3D91kCKzM
亲切的问候
克里斯
答案 0 :(得分:15)
这是一个解决方案
constant
作为其lightingModel
的素材。它是最便宜的。writesToDepthBuffer
设置为true
,colorBufferWriteMask
设置为[]
(空选项集)。这样,立方体将在深度缓冲区中写入,但不会在屏幕上绘制任何内容。renderingOrder
设置为-1
,以便在场景中的任何其他节点之前绘制它。这将使多维数据集在任何其他对象之前写入深度缓冲区,从而防止它们在多维数据集后面被绘制。答案 1 :(得分:0)
基于@mnuages answer,您可以使用此类:
import SceneKit
class OccludingNode : SCNNode {
convenience init(geometry: SCNGeometry) {
geometry.materials = [OccludingMaterial()]
self.init()
self.geometry = geometry
self.renderingOrder = -1
}
}
class OccludingMaterial : SCNMaterial {
override init() {
super.init()
isDoubleSided = true
lightingModel = .constant
writesToDepthBuffer = true
colorBufferWriteMask = []
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
根据您想要的任何几何图形创建一个OccludingNode
,其后面的任何内容都不会呈现。