gpt4 book ai didi

ios - 如何在 ARKit 中点击放置自定义对象(.scn)?

转载 作者:行者123 更新时间:2023-11-29 05:33:07 24 4
gpt4 key购买 nike

当用户点击屏幕时,我试图在 ARKit 中放置一个自定义对象。我想出了如何通过在代码中创建对象来放置对象,但想放置一个已导入项目的对象(例如ship.scn)。这是我将对象放置在代码中的代码及其工作原理:

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
guard let touch = touches.first else {return}
let results = sceneView.hitTest(touch.location(in: sceneView), types: [ARHitTestResult.ResultType.featurePoint])
guard let hitFeature = results.last else { return}
let hitTransform = SCNMatrix4.init(hitFeature.worldTransform)

let hitPosition = SCNVector3Make(hitTransform.m41, hitTransform.m42, hitTransform.m43)
createBall(hitPosition: hitPosition)
}


func createBall(hitPosition: SCNVector3) {
let newBall = SCNSphere(radius: 0.05)
let newBallNode = SCNNode(geometry: newBall)
newBallNode.position = hitPosition
self.sceneView.scene.rootNode.addChildNode(newBallNode)
}

我尝试创建此函数来放置导入的 .scn 文件,但是当我点击屏幕时没有显示任何内容:

func createCustomScene(objectScene: SCNScene?, hitPosition: SCNVector3) {
guard let scene = objectScene else {
print("Could not load scene")
return
}

let childNodes = scene.rootNode.childNodes

for childNode in childNodes {
sceneNode.addChildNode(childNode)
}
}

这样调用:createCustomScene(objectScene: SCNScene(named: "art.scnassets/ship.scn"), hitPosition: hitPosition)

有人知道为什么点击屏幕时不显示 .scn 吗?

最佳答案

您应该考虑将您的 childNode 添加到 sceneView,而不是将其添加到您的 sceneNode。

for childNode in childNodes {
childNode.position = hitPosition
self.sceneView.scene.rootNode.addChildNode(childNode)
}

关于ios - 如何在 ARKit 中点击放置自定义对象(.scn)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57341126/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com