gpt4 book ai didi

ios - ARKit:如何将 .obj 文件放置在具有多种 Material 的平面上

转载 作者:行者123 更新时间:2023-11-28 07:33:38 27 4
gpt4 key购买 nike

我想在飞机上放置一个汽车对象。

我正在这样设置场景 View 。

func setUpSceneView() {
let configuration = ARWorldTrackingConfiguration()
configuration.planeDetection = .horizontal

sceneView.session.run(configuration)

sceneView.delegate = self
sceneView.debugOptions = [ARSCNDebugOptions.showFeaturePoints]
}

func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) { // 1 guard let planeAnchor = anchor as? ARPlaneAnchor else { return }

// 2
let width = CGFloat(planeAnchor.extent.x)
let height = CGFloat(planeAnchor.extent.z)
let plane = SCNPlane(width: width, height: height)

// 3
plane.materials.first?.diffuse.contents = UIColor.transparentLightBlue

// 4
let anchorNode = SCNScene(named: "art.scnassets/car.scn")!.rootNode

// 5
let x = CGFloat(planeAnchor.center.x)
let y = CGFloat(planeAnchor.center.y)
let z = CGFloat(planeAnchor.center.z)
planeNode.position = SCNVector3(x,y,z)
planeNode.eulerAngles.x = -.pi / 2


node.addChildNode(anchorNode)[car object][1]
}

https://app.box.com/s/vdloxlqxk9rh6h4k5ggwrxm1hslktn8g

我可以放置汽车,但它是整个相机场景。谁能告诉我坐标系统或 3D 对象的问题。

最佳答案

这取决于您要如何放置汽车。现在您的应用程序将放置一个 anchor ,它决定创建第一个 anchor 的位置就是您的汽车将到达的位置。如果您想在扫描时更新 anchor ,您需要调用 didUpdate 并且您的 anchor 将移动到平面范围的中心:

func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor){}

但是,您似乎已经定义了 anchor 的大小。我以前从未那样尝试过,我不确定您是否可以通过编程将 anchor 移动到所需位置。在我看来,如果应用程序不知道它是一个水平表面,它会导致问题,但我从未测试过它。

相反,我建议您像上面那样创建您的平面(不声明其大小)。使用上面的“didUpdate”函数更新您的平面尺寸。然后,如果您想将汽车停在预定位置,请运行 hittest。

这里有一个很好的资源可以引导您完成: https://www.appcoda.com/arkit-horizontal-plane/

关于ios - ARKit:如何将 .obj 文件放置在具有多种 Material 的平面上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53905932/

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