Swarp SDKまたはARアプリケーションをすばやく作成する方法





拡張現実アプリケーションはますます人気が高まっています。 遅かれ早かれ、ロシアの誰かが確かにそのようなアプリケーションを作成するためのSDKをリリースしたでしょう。 そして、ロシアの企業Sectarは、.NETプラットフォームでそのようなアプリケーションを作成するためのSwarp SDK製品をリリースしました。 次に、Swarpについて説明し、ARアプリケーションをすばやく簡単に作成する方法を示します。



復習


製品をダウンロードしてインストールした後(執筆時点では、バージョン1.0.249.925が関連しています)、5つのサブディレクトリが表示されます。





マーカー


Swarp SDKは独特のマーカーシステムを使用します。 マーカーは、拡張子が.trackableのXMLファイルとして表示されます。 標準マーカーの1つの内容を以下に示します。



紙の上でマーカーがどのように見えるか:



.trackableファイル内のコンテンツ:

<?xml version="1.0" encoding="utf-8"?> <Trackable Type="Sectar Square Marker" Description="Marker with square detection element" Version="1.0" Company="Sectar"> <SquareMarker MarkerSize="500" FrameWidth="80" CellsCount="4" FrameMargin="15" CellMargin="5" CellsType="Circle"> <Code>111100010101</Code> </SquareMarker> </Trackable>
      
      





多くの人に質問があります:.trackableファイルを一般的な.jpgまたは.pngに変換して紙に印刷する方法は? 簡単です。SquareMarkerCreator.exeユーティリティが役に立ちます。



マーカーユーティリティ(SquareMarkerCreator)


名前が示すとおり、このユーティリティはSwarp SDKで使用されるマーカーを作成するために使用されます。 起動後、視覚的なマーカーエディターが表示されます。

対応するセルをクリックするだけで、マーカーセルの色を変更できます。 ここでは、インデント、フレーム幅、セルマトリックスの寸法などのマーカーパラメーターを変更できます。



マーカーをXML形式からグラフィック形式に変換するには、「XMLからダウンロード」ボタンをクリックしてマーカーをロードし、「画像を保存」ボタンをクリックしてマーカーを.EMFファイルに保存する必要があります。



Hello World!Swarp SDKで


ARアプリケーションを作成してみましょう。 OgreSimpleSceneExampleの例を解析して、最初に出会ったカメラを使用し、Mogreを使用して1つの3Dモデルをレンダリングします。



コンソールWin32アプリケーションのプロジェクトを作成しましょう。 そして、リファレンスで使用されるアセンブリを追加します。



そして、コードでは、使用されている名前空間へのリンクを追加します。

 using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; using Mogre; using Swarp.Examples.OgreSimpleSceneExample.Properties; using Swarp.SDK.Management; using Swarp.SDK.Ogre3DRendering; using Swarp.SDK.Rendering; using Swarp.SDK.Target.SquareMarkerTracking; using Swarp.SDK.Tracking; using Swarp.SDK.DirectShowInput;
      
      





次に、拡張現実プロセスを実装する静的クラスProgramにフィールドを追加する必要があります。 AugmentedRealityManagerクラスが必要になります。このクラスは、さまざまなSDKモジュールの相互作用と管理を提供します。 また、使用するマーカーを記述するITrackableインターフェイスも必要です。 これらのフィールドを追加すると、次のコードが取得されます。

 static class Program { /// <summary> ///   . /// </summary> private static AugmentedRealityManager _arManager; /// <summary> ///  . /// </summary> private static ITrackable _houseTrackable; /// <summary> /// The main entry point for the application. /// </summary> [STAThread] public static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); } }
      
      





これで、アプリケーションへのエントリポイントができました。 疑問が生じます-次に何をすべきか? 次に、Swarp SDKドキュメントから写真を提供します。



写真の赤い枠は、開発者が実行する必要があるアクションを強調しています。

現在の段階で、カメラを初期化する必要があります。 これを行うには、 CameraManagerクラスを使用します。

 //     . var camera = CameraManager.Instance.GetFirstWorkedCamera(); //     ,      . if (camera == null) { MessageBox.Show(Resources.CameraNotFoundString, Resources.WarningString, MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } var displayParameters = new DisplayParameters(30, new Size(800, 600)); //       ,    . camera.DisplayParameters = camera.IsSupportedDisplayParameters(displayParameters) ? displayParameters : camera.GetSupportedDisplayParameters()[0];
      
      





次に、アプリケーションで使用するマーカーを指定する必要があります。 これは次の方法で行われます。

 var tracker = new SquareMarkerTracker(1); //  1  .      . _houseTrackable = new SquareMarker("House Marker", "Trackable\\5.trackable"); tracker.TrackableObjects.Add(_houseTrackable);
      
      





したがって、 Trackable \ 5.trackableマーカーがマーカー追跡システムによって検索されることを示します。



そして、Mogreベースのレンダリングシステムを初期化する必要があります。

 //  ,      . var ogreSimpleSceneForm = new Form { Size = new Size(1066, 600), Text = Resources.SwarpSDKExampleString, Icon = Resources.Swarp, }; //  . // plugins.cfg -       Ogre3D. // ogre.cfg -     ,    Ogre3D. // ogre.log - -,       Ogre3D. //       , //          . var renderer = new Ogre3DRenderSystem(ogreSimpleSceneForm.Handle, "OgreConfig\\plugins.cfg", "OgreConfig\\ogre.cfg", "OgreConfig\\ogre.log") { SizeMode = SizeMode.Autosize }; //     . //        // (3D ,   ..,    Ogre3D  ). renderer.LoadResources("OgreConfig\\resources.cfg"); //  .  . var houseScene = new Ogre3DScene(renderer.Root, "House Scene"); renderer.Scenes.Add(houseScene); LoadScene(houseScene.SceneManager);
      
      





Managed Ogreの操作はOgre3DRenderingSystemクラスにカプセル化されており、ほとんどの日常的な操作を引き受けるため、開発者の生活が大幅に簡素化されます。 一般に、Mogreは独立した非常に大きなトピックなので、誰かが興味を持っている場合は、記事の最後にMogre wikiへのリンクがあります。



Swarp SDKは、開発者をOgreだけに限定しません。 原則として、開発者は別のレンダラーを統合できます。 これを行うには、Swarp.SDK.Rendering名前空間にあるRendererとSceneを継承する2つのクラスを作成します。



アプリケーションに戻りましょう。 Ogre3DRenderSystemコンストラクターを呼び出すとき、4つのパラメーターが指定されます:Mogreが動作するフォームまたはコントロールのハンドル、プラグインを記述するOgre構成ファイルへのパス、レンダリングシステムの設定、およびログファイルへのパス。



次はOgreリソースです。 3Dモデルをダウンロードするには、それらへの参照をリソース構成ファイルで指定する必要があります。 たとえば、私のリソース構成ファイルは次のようになります。

 # Resource locations to be added to the 'boostrap' path # This also contains the minimum you need to use the Ogre example framework [Bootstrap] # Resource locations to be added to the default path [General] FileSystem= FileSystem=Resources Zip=Resources/House.zip
      
      





ここでは、ZIPアーカイブにある1つのHouse.zipモデルのみをダウンロードします。

次に、 LoadSceneメソッドが呼び出されます。 Mogreシーンを作成し、それにモデルを追加するために必要です。 詳細については、Mogre wikiをご覧ください。 その方法を以下に説明します。

 private static void LoadScene(SceneManager sceneManager) { //     Mogre,    , //   .. . http://www.ogre3d.org/tikiwiki/Mogre+Tutorials. //  ,     . var houseNode = sceneManager.RootSceneNode.CreateChildSceneNode("HouseNode"); //    (   ). var houseEntity = sceneManager.CreateEntity("House", "House.mesh"); houseNode.AttachObject(houseEntity); houseNode.Scale(6.0f, 6.0f, 6.0f); }
      
      







これで、マネージャーを初期化して実行する準備がすべて整いました。

 //    . _arManager = new AugmentedRealityManager(camera, trackers, renderer); //  . //      . camera.Start(); //    . //     . _arManager.Start(); ogreSimpleSceneForm.Show(); while (ogreSimpleSceneForm.Created) { //         , //     ,      . UpdateScenes(); //   . // ,       , //      . _arManager.Renderer.RenderFrame(); //      . Application.DoEvents(); } //       . _arManager.Dispose(); renderer.Dispose(); camera.Dispose();
      
      







重要なポイント:拡張現実プロセスを開始する前に、カメラからのキャプチャを有効にする必要があります。



UpdateScenesメソッドは、空間内のマーカーの位置に従ってモデルを方向付けます(トラッカーが検出した場合)。

 private static void UpdateScenes() { //     , //     ,       . var foundTrackableObjects = new List<ITrackable>(_arManager.Trackers[0].LastDetectedObjects); //      . foreach (var scene in _arManager.Renderer.Scenes) { //       ,   . if (foundTrackableObjects.Contains(_houseTrackable)) { //    ,    . scene.Visible = true; //    . var trackablePose =_arManager.Trackers[0].GetPose(_houseTrackable); //       . scene.OrientScene(trackablePose); } else { scene.Visible = false; } } }
      
      







したがって、拡張現実の世界で最初のARアプリケーションである「Hello、world!」を取得しました。 私が得たもののスクリーンショットを撮りました:



動作中のSwarp SDKの小さなビデオ:





いい家ですね。



結論として


ここでは、どうやら、ARアプリケーションを作成するために必要なすべてのことです。 SDKドキュメントを読み、その仕組みを理解するのに約2時間かかりました。



この記事がSwarpを理解したい人に役立つことを願っています。 次の記事では、アプリケーションをより真剣かつより複雑に記述しようとします。 読んでくれてありがとう。



参照資料


開発者サイト: www.sectar.com

SDKダウンロードリンク: Swarp SDK

マネージオーガMogre wiki



UPD:ビデオを投稿しました。

UPD 2:現場からのニュース:Sectarは新しいアップデートを公開しました。 古いバージョンでは、トライアルモードのアクティブ化でエラーが発生しました。 修正されたようです。 投稿はダウンロードリンクを修正しました。



All Articles