【发布时间】:2019-05-24 05:16:05
【问题描述】:
我将在 ARKit 中检测水平和垂直平面。检测到是水平面还是垂直面后,分别在检测面上添加灰色平面。在检测到的平面上点击我将添加.scn文件的3D对象。
我的代码在将 3D 对象(.scn 文件)放置在水平面上工作正常,但在垂直面上不能正常工作。
像相框这样的垂直平面的 3D 对象(.scn 文件)在 SceneKit 编辑器中面向右侧。所以我将它的 EularAngleY 更改为 -0,它现在在 SceneKit 编辑器中面向前方。当我点击检测到的面向前方的垂直平面时,相框也向右,如果我将设备向右移动并放置相框,那么它是正确的。
我想放置应该与平面平行的 3D 对象 .scn 文件(如果垂直平面朝前,那么即使在 .scn 文件中它面向任何方向,它也应该朝前)。那个 3D 对象不平行于检测到的平面。
我是否需要根据检测到的平面角度更改旋转,或者需要在 SceneKit 编辑器中对 .scn 文件进行任何更改?我怎样才能实现它?
请检查以下代码以检测到垂直平面。有什么问题吗?
@objc func addObjectToSceneView1(withGestureRecognizer recognizer: UIGestureRecognizer){
let tapLocation = recognizer.location(in: sceneView)
let hitTestResults = sceneView.hitTest(tapLocation, types: .existingPlaneUsingExtent)
guard let hitTestResult = hitTestResults.first, let anchor = hitTestResult.anchor as? ARPlaneAnchor else { return }
let translation = hitTestResult.worldTransform.columns.3
let x = translation.x
let y = translation.y
let z = translation.z
guard let shipScene = SCNScene(named: "art.scnassets/frame/frame.scn"),
let shipNode = shipScene.rootNode.childNode(withName: "frame", recursively: true)
else { return }
shipNode.position = SCNVector3(x,y,z)
sceneView.scene.rootNode.addChildNode(shipNode)
}
.scn 文件如下所示。这个 .scn 文件是否正确?或者 x 应该是框架的深度?每次我点击飞机时,它只会显示这样的图像。
【问题讨论】: