ARKit 如何停止闪烁或如何将节点定位到相机,
ARKit How to stop flickering or How to position node towards camera,
我用 SCNPlane 创建了 Wall。在那架飞机上,我正在添加另一个用户指向设备的飞机
但由于两个平面位置相同,新添加的平面闪烁。
那么如何保持与墙节点和平面节点的距离
如何添加平面节点
let hitTestScene = self.sceneView.hitTest(self.sceneView.center, options:[SCNHitTestOption.categoryBitMask : 16])
if let first = hitTestScene.first {
if first.node.name == NodeNames.wallNode {
let value = MathHelper().getMeasurementBetween(vector1: lastNodePosition, and: first.worldCoordinates)
let node = SCNNode(geometry: SCNPlane(width: CGFloat( value) , height: CGFloat(value)))
node.geometry?.firstMaterial?.isDoubleSided = true
node.name = "Plane1"
node.geometry?.firstMaterial?.diffuse.contents = UIColor.red.withAlphaComponent(1)
node.eulerAngles = first.node.eulerAngles
node.position = lastNodePosition
self.sceneView.scene.rootNode.addChildNode(node)
}
}
红色平面不断闪烁(出现-消失)
我试过 node.position.z -= 0.2
但它不工作并且节点位置完全改变因为 node.eulerAngles
任何帮助将不胜感激
我想出来了
通过设置 rendringOrder 和 readsFromDepthBuffer
我能够停止这种轻弹效果
extension SCNNode {
func renderOnTop() {
self.renderingOrder = 2
if let geom = self.geometry {
for material in geom.materials {
material.readsFromDepthBuffer = false
}
}
for child in self.childNodes {
child.renderOnTop()
}
}
}
如果遇到同样的问题,希望有人可以使用它
我用 SCNPlane 创建了 Wall。在那架飞机上,我正在添加另一个用户指向设备的飞机
但由于两个平面位置相同,新添加的平面闪烁。
那么如何保持与墙节点和平面节点的距离
如何添加平面节点
let hitTestScene = self.sceneView.hitTest(self.sceneView.center, options:[SCNHitTestOption.categoryBitMask : 16])
if let first = hitTestScene.first {
if first.node.name == NodeNames.wallNode {
let value = MathHelper().getMeasurementBetween(vector1: lastNodePosition, and: first.worldCoordinates)
let node = SCNNode(geometry: SCNPlane(width: CGFloat( value) , height: CGFloat(value)))
node.geometry?.firstMaterial?.isDoubleSided = true
node.name = "Plane1"
node.geometry?.firstMaterial?.diffuse.contents = UIColor.red.withAlphaComponent(1)
node.eulerAngles = first.node.eulerAngles
node.position = lastNodePosition
self.sceneView.scene.rootNode.addChildNode(node)
}
}
红色平面不断闪烁(出现-消失)
我试过 node.position.z -= 0.2
但它不工作并且节点位置完全改变因为 node.eulerAngles
任何帮助将不胜感激
我想出来了
通过设置 rendringOrder 和 readsFromDepthBuffer
我能够停止这种轻弹效果
extension SCNNode {
func renderOnTop() {
self.renderingOrder = 2
if let geom = self.geometry {
for material in geom.materials {
material.readsFromDepthBuffer = false
}
}
for child in self.childNodes {
child.renderOnTop()
}
}
}
如果遇到同样的问题,希望有人可以使用它