ios - 如何将 ARKit 节点更改为不同的东西
问题描述
我需要一些帮助才能在我的ARKit
场景中实现自定义节点。我正在使用ARSCNFaceGeometry
遮罩节点来移动。我需要一些帮助来实现自定义图像或节点,而不是使用 Apple 的掩码节点。谢谢您的帮助。
var maskNode: Mask?
override func viewDidLoad() {
super.viewDidLoad()
self.sceneView.backgroundColor = .clear
self.sceneView.scene = SCNScene()
self.sceneView.rendersContinuously = true
if let device = MTLCreateSystemDefaultDevice(),
let geo = ARSCNFaceGeometry(device: device) {
self.maskNode = Mask(geometry: geo)
self.sceneView.scene?.rootNode.addChildNode(self.maskNode!)
self.maskNode?.position = SCNVector3(x: 0.0, y: 0.0, z: 0.0)
self.maskNode?.isHidden = true
}
let config = ARFaceTrackingConfiguration()
config.worldAlignment = .gravity
session.delegate = self
session.run(config, options: [])
self.updateUI()
}
面具:
class Mask: SCNNode, VirtualFaceContent {
init(geometry: ARSCNFaceGeometry) {
let material = SCNMaterial()
material.diffuse.contents = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
geometry.firstMaterial = material
super.init()
self.geometry = geometry
}
required init?(coder aDecoder: NSCoder) {
fatalError("\(#function) has not been implemented")
}
// MARK: VirtualFaceContent
/// - Tag: SCNFaceGeometryUpdate
func update(withFaceAnchor anchor: ARFaceAnchor) {
let faceGeometry = geometry as! ARSCNFaceGeometry
faceGeometry.update(from: anchor.geometry)
}
}
虚拟人脸内容:
protocol VirtualFaceContent {
func update(withFaceAnchor: ARFaceAnchor)
}
typealias VirtualFaceNode = VirtualFaceContent & SCNNode
// MARK: Loading Content
func loadedContentForAsset(named resourceName: String) -> SCNNode {
let url = Bundle.main.url(forResource: resourceName, withExtension: "scn", subdirectory: "Models.scnassets")!
let node = SCNReferenceNode(url: url)!
node.load()
return node
}
解决方案
您可以使用渲染器(节点:用于锚点:)。Guard 检查锚是否是 ARFaceAnchor,然后将您的自定义几何图形分配给该节点。您也可以将自定义节点添加到为锚添加的 ARKit 节点,由您决定。
推荐阅读
- python - 如何从描述为列表的命令行中准确删除特定关键字?
- sql-server - Sequelize 从 SQL Server 返回旧数据
- python-3.x - 使用python跳过整个csv文件中的每2行
- angular - 如何设置 Angular 9 matRadioButton 组的初始值?
- python - 当我在 pycharm 上克隆一个 repo 时,我需要设置一个 python 解释器
- python - 如何使用自定义 cookie 连接到使用 PyQt5 的网站?
- reactjs - React-Router:为什么重定向到 404 页面?
- java - IntelliJ 不工作 - 当我启动我的程序时,它在输入之前完成
- css - CSS - 水平嵌套列表乱序换行
- freepascal - Pascal Debian Jessie TryGetData 不工作