2017-10-14 22 views
1

私は単純なARKitアプリケーションを持っています。ユーザが画面にSCNBoxは、ARKitでカメラの前面を回転させます。

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    guard let touch = touches.first else { return } 
    let result = sceneView.hitTest(touch.location(in: sceneView), types: [ARHitTestResult.ResultType.featurePoint]) 
    guard let hitResult = result.last else { return } 
    let hitTrasform = SCNMatrix4(hitResult.worldTransform) 
    let hitVector = SCNVector3Make(hitTrasform.m41, hitTrasform.m42, hitTrasform.m43) 

    createBox(position: hitVector) 
} 

に接触したとき、私は最初にそれを追加すると、私は正面側、右側のビットを参照キューブ

func createBox(position: SCNVector3) { 
    let box = SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 1) 
    box.firstMaterial?.diffuse.contents = UIColor.black 

    let sides = [ 
     UIColor.red,   // Front 
     UIColor.black,  // Right 
     UIColor.black,  // Back 
     UIColor.black,  // Left 
     UIColor.black,  // Top 
     UIColor.black   // Bottom 
    ] 

    let materials = sides.map { (side) -> SCNMaterial in 
     let material = SCNMaterial() 
     material.diffuse.contents = side 
     material.locksAmbientWithDiffuse = true 
     return material 
    } 

    box.materials = materials 

    let boxNode = SCNNode(geometry: box) 
    boxNode.position = position 
    sceneView.scene.rootNode.addChildNode(boxNode) 
} 

を加えます。私が反対側の立方体を回って別の立方体を追加すると、立方体の裏側が見えます。だから、私はそれを行うことができますので、ユーザーは前面だけを見て、どのようにユーザーが回っている。

ありがとうございます。

答えて

1

SCNBillboardConstraintを使用すると、特定のノードをカメラに向けることができます。 rootNodeに追加する前にboxNode.constraints = [SCNBillboardConstraint()]を追加するだけです。

+0

これは正しい答えですが、代わりにノードの.orientationプロパティをレンダデリゲートのSCNView(アクティブなカメラ)のpointOfViewの方向に設定することができます。 – Xartec

関連する問題