ARKitが3Dオブジェクトの追加を開始

プロジェクトの作成まず、Xcodeを開き、以下のようにARKitテンプレートを選択します。

ARプロジェクトの作成

その後、プロジェクト情報を入力した後、コンテンツテクノロジーをSceneKitとして選択します。もちろん、SpriteKitを選択することもできますが、3D空間で立体的ではありません。
開発言語はSwift、Swiftの自然親和性とARKitを選択します。多くのオンラインデモはSwiftで書かれています。これは移植や学習にも便利です。

その後、テストデバイスを接続して実行すると、アプリケーションが実行されます。 テンプレートAPPは、カメラレンズの実装において航空機の3Dモデルを表示する。 以下に示すように:

3D航空機

実際のプロジェクトでは、テンプレートを使用してプロジェクトを作成したり、関連するライブラリを直接インポートして開発することもできます。

プロジェクトでは、ARWorldTrackingConfigurationインスタンスがviewWillAppearメソッドで初期化されていることがわかります。

オーバーライドfunc viewWillAppear(_ animated:Bool){

  super.viewWillAppear(animated)  

  // Create a session configuration
  let configuration = ARWorldTrackingConfiguration()

  // Run the view's session
  sceneView.session.run(configuration)

}
3Dオブジェクトの配置
SceneKitにはいくつかの基本クラスがあり、SCNSceneはすべての3Dコンテンツのコンテナで、複数の3Dオブジェクトを追加できます。
シーンにコンテンツを追加するには、SCNGeometryを作成し、SCNNodeとしてラップしてSCNSceneに追加します。

最初にlet scene = SCNScene(名前: "art.scnassets / ship.scn")!sceneView.scene = sceneをコメントアウトし、次のようにコードを追加します。

オーバーライドfunc viewDidLoad(){

super.viewDidLoad()
// 存放所有3D几何体的容器
let scene = SCNScene()

// 想要绘制的 3D 立方体
let boxGeometry = SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0.0)

// 将几何体包装为node以便添加到scene
let boxNode = SCNNode(geometry: boxGeometry)

// 把box放在摄像头正前方
boxNode.position = SCNVector3Make(0, 0, -0.5)

// rootNode是一个特殊的node,它是所有node的起始点
scene.rootNode.addChildNode(boxNode)

// 将 scene 赋给 view
sceneView.scene = scene

}
プロジェクトを実行すると、3Dキューブが空中に浮遊しており、あらゆる方向に死角がないことがわかります。

また、デバッグ情報を追加することもできます。

// ARKit、fpsなどの統計情報
sceneView.showsStatistics = YES;

sceneView.debugOptions = [ARSCNDebugOptions.showFeaturePoints];
//カメラのプロパティを調整する現在のカメラの有効直径は10m以内です。
let camera = sceneView.pointOfView?.camera {

camera.wantsHDR = true
  camera.wantsExposureAdaptation = true
  camera.exposureOffset = -1
  camera.minimumExposure = -1
  camera.zFar = 10

}
ARKitの機能を簡単に体験する前に、ARKitの動作を簡単に説明します。

ARKitの仕組みARKitでは、仮想3Dモデルを作成するには、実際には2つのステップに分けることができます。

カメラは実世界の画像をキャプチャします – AVRはSceneKit / SpriteKitによって実装された仮想3Dモデル/ 2Dモデルを画像に表示するために使用されます
ARSCNView内のARSCNViewは、3D仮想ARのビューを表示するために使用され、その役割はARSessionを管理することです。ARSCNViewインスタンスはデフォルトでARSessionを保持します。
ARCitフレームワークは、現実世界の画像を3Dシーンに変換する役割を担います。この変換のプロセスは、主に2つの部分に分かれています。ARCameraはカメラ画像のキャプチャを担当し、ARSessionは3Dシーンの設定を担当します。 3Dシーン内の仮想オブジェクトの表示は、SceneKitフレームワークによって行われ、各仮想オブジェクトはノードSCNNodeであり、各ノードはシーンSCNSceneを構成します。
ARCameraは、画像を取り込み、データ処理に関与しないことのみを担当します。 これは3Dシーン内のリンクに属し、各3Dシーンにはカメラがあり、これが表示されるオブジェクトのビューを決定します。
次の図は、ARKitとSceneKitのフレームワーク図です。

ARKitクラス構造

ARSessionConfigurationの主な目的は、3D世界でのカメラの位置と、比較的シンプルで強力ないくつかのフィーチャシーン(プレーンキャプチャなど)のキャプチャを追跡することです。 ARSessionConfigurationは親クラスです。拡張現実感の効果をよりよく理解するために、AppleはサブクラスARWorldTrackingSessionConfigurationを使用することを正式に推奨しています。これはA9チップの後のモデルをサポートしています。

ARWorldTrackingSessionConfigurationは、3次元世界でカメラの位置を計算するとき、位置データ自体を保持せず、計算された位置データをARSessionに渡して管理し、位置データに対応するカメラはARFrameです。 ARSessionクラスのプロパティはcurrentFrameと呼ばれ、ARFrameオブジェクトはメンテナンスされます。

ARFrame

ARKitの完全な操作プロセスは、次の図を参照してください。

ARSCNViewロードシーンSCNScene
SCNSceneがARCameraを起動して画像のキャプチャを開始する
ARSCNViewはSCNSceneシーンデータをARSessionに引き渡す
ARSessionは、ARSessionConfigurationを管理してシーントラッキングを実装し、ARFrameを返します(3Dオブジェクトモデルを追加するときにカメラに対する3Dモデルの真行列位置を計算する際に必要です)
ARSCNViewのSCNSceneに子ノード(SCNNode)を追加する
ARKitワークフロー


この記事ではARKitを使用して、ARワールドの最後に3Dオブジェクトを配置する簡単なアプリケーションを作成し、iOSデバイスで3Dオブジェクトを移動することができます。 これは非常に簡単なアプリですが、私たちは、平面検出、3D物理などを含む、後の記事でさらに多くの機能を書き続けます。

元のリンク