2017-08-29 16 views
4

ARKitのほとんどのチュートリアルでは、常に床にARPlaneを使用しているようです。ARKitでSCNFloorを使用する

let planeGeometry = SCNPlane(width:CGFloat(planeAnchor.extent.x), height:CGFloat(planeAnchor.extent.z)) 
let planeNode = SCNNode(geometry:planeGeometry) 
planeNode.position = SCNVector3(x:planeAnchor.center.x, y:0, z:planeAnchor.center.y) 
planeNode.transform = SCNMatrix4MakeRotation(-Float.pi/2, 1.0, 0, 0) 

無限遠平面(陰影を投影する)を使用する場合はどうなりますか?私はSCNFloorを試してみましたが、結果は奇妙である - フロアが空中でハングアップ:

let planeGeometry = SCNFloor() 
let planeNode = SCNNode(geometry:planeGeometry) 
planeNode.position = SCNVector3(planeAnchor.center.x, 0, planeAnchor.center.z) 

(も動作しません)私はGoogleの検索を行っていると私が出ているだけ結果がこれです:https://github.com/arirawr/ARKit-FloorIsLava/blob/master/FloorIsLava/ViewController.swift

SCNFloor()はARKitで動作しますか?そうでない場合、私は大きな飛行機を作るために何をすることができますか?

答えて

1

あなたがルートノードにあなたの床のノードを追加する場合は、あなたのY位置を変更する必要があります。

私が使用この場合
planeNode.position = SCNVector3(planeAnchor.center.x, -1.0, planeAnchor.center.z) 

マイナス1メートル^

あなたの床面を見つけるために、表面の検出を使用することができますアンカーを作成し、このアンカーの関連ノードにフロアを追加します。アンカーの世界座標は既に正しく(マイナスY)、SCNVector3Zeroを床の位置として使用できます。

+0

なぜ任意-1:

let overHang:CGFloat = 0.2 ... let planeGeometry = SCNNode(geometry: SCNPlane(width: CGFloat(planeAnchor.extent.x)+overHang, height: CGFloat(planeAnchor.extent.z)+overHang)) 

それとも、ただCGFloatはメートルでサイズを指定するために使用します。

あなたはこのようなことが少し大きくすることができますか? –

+0

@LimThyeCheanはテスト用です。表面検出を使用して、まず実際の床座標を見つける必要があります。次に、実床の 'Y'座標を使用します。 –

0

あなたはちょうどあなたが好きなようにあなたの飛行機が同じ大きさにするために、この行を変更することができます

let planeGeometry = SCNPlane(width:CGFloat(planeAnchor.extent.x),height:CGFloat(planeAnchor.extent.z) 

それは上記した方法は、それが道に沿って更新をARKit検出された平面の大きさに一致します。

let theSize:CGFloat = 4.0 
... 
let planeGeometry = SCNNode(geometry: SCNPlane(width: theSize, height: theSize)) 
関連する問題