ARKit: Как разместить файл .obj на плоскости, где есть несколько материалов - PullRequest
0 голосов
/ 23 декабря 2018

Я хочу разместить автомобильный объект на плоскости.

Я устанавливаю вид сцены следующим образом.

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

Я могуПоместите машину, но она везде со сцены с камерой.Может ли кто-нибудь сказать мне проблему с Cooridnate системы или 3D-объекта.

1 Ответ

0 голосов
/ 24 декабря 2018

Это зависит от того, как вы хотите разместить машину.Прямо сейчас ваше приложение будет размещать якорь, и там, где он решит создать свой первый якорь, будет стоять ваша машина.Если вы хотите обновить свой якорь во время сканирования, вам нужно вызвать didUpdate, и ваш якорь переместится в центр экстента вашей плоскости:

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

Однако, похоже, что вы ужеопределил размер, который вы хотите, чтобы ваш якорь был.Я никогда не пробовал так раньше, и я не уверен, что вы можете программно перенести свой якорь в нужное место.На мой взгляд, это может вызвать проблемы, если приложение еще не знает его горизонтальную поверхность, но я никогда не проверял его.

Вместо этого я бы порекомендовал создать плоскость, как вы делали выше (безобъявив его размер).Обновите размер самолета с помощью функции didUpdate, указанной выше.Затем, если вы хотите разместить свой автомобиль в заранее определенном месте, проведите тестирование.

Вот хороший ресурс, который поможет вам пройти: https://www.appcoda.com/arkit-horizontal-plane/

...