我有一个图像参考正在触发ARKit2上的体验,并且我想创建一个遮挡平面,该平面覆盖触发器周围的所有内容,除了触发器本身。代表性的是,它是这样的(将图像放置在平面下方以显示更好,但实际上是在同一水平上):
到目前为止,我对像这样的常规形状进行遮挡没有问题:
func setOcclusionMaterial() {
let occlusionPlane = SCNPlane(width: imageReference!.physicalSize.width, height: imageReference!.physicalSize.height)
let holdout = SCNMaterial()
holdout.isDoubleSided = true
holdout.diffuse.contents = CIColor.black
holdout.colorBufferWriteMask = SCNColorMask(rawValue: 0)
occlusionPlane.firstMaterial? = holdout
let occlusionNode = SCNNode()
occlusionNode.eulerAngles.x = -.pi / 2
occlusionNode.geometry = occlusionPlane
node!.addChildNode(occlusionNode)
}
但是,我不确定如何创建一个不包含图像区域(圆圈)的平面。
我想做的是放置一个3D元素,该元素似乎位于触发器下方,但只有从上向下或略微倾斜才能看到。
希望这很清楚,如果您有任何想法,谢谢您的帮助。
答案 0 :(得分:0)
您的代码不会对我造成阻碍,至少在我迅速聚集在一起的游乐场中不会如此。如果我的答案不能真正解决您的问题,也许您可以创建一个。
您必须在此处进行选择。可以在3D建模工具(如Blender)中创建自定义几何图形,也可以通过SCNGeometrySource
手动创建几何图形,但这很麻烦,因为您将需要很多三角形才能使其正常工作。
您可以尝试将CALayer
用作飞机的geometry
:
创建一个CGPath
,它是带有圆形切口(或您想要的任何形式)的矩形,然后从路径中创建一个CAShapeLayer
。
var path = CGMutablePath()
path.addRect(CGRect(x: 0, y: 0, width: 100, height: 100))
path.addEllipse(in: CGRect(x: 25, y: 25, width: 50, height: 50))
let layer = CAShapeLayer()
layer.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
layer.path = path
layer.fillColor = UIColor.white.cgColor
layer.fillRule = .evenOdd
我无法确认这是否确实有效,因为您的遮挡对我而言不是很有效。