
拡張現実アプリケーションはますます人気が高まっています。 遅かれ早かれ、ロシアの誰かが確かにそのようなアプリケーションを作成するためのSDKをリリースしたでしょう。 そして、ロシアの企業Sectarは、.NETプラットフォームでそのようなアプリケーションを作成するためのSwarp SDK製品をリリースしました。 次に、Swarpについて説明し、ARアプリケーションをすばやく簡単に作成する方法を示します。
復習
製品をダウンロードしてインストールした後(執筆時点では、バージョン1.0.249.925が関連しています)、5つのサブディレクトリが表示されます。
- Bin-すべてのSwarp SDKアセンブリと、レンダリングに使用されるManaged Ogre(Mogre)エンジンのライブラリです。
- ドキュメント -(ライセンス契約とリリースノートに加えて)非常に興味深いファイル「Documentation.chm」が含まれています。 クラスの説明やチュートリアルなど、Swarpのすべてのドキュメントが含まれています。 ちなみに、すべてのドキュメントはロシア語であり、MSDNのスタイルで作成されています。理論的には、.NETでの開発者の認識を促進するはずです。
- Examplesは、Sectar開発者によって作成された例を含むフォルダーです。 このバージョンのSDKには、3つのモデルとマーカーを動的にリンクするためのメカニズムだけでなく、Mogreベースのレンダリングシステム(.NetラッパーOgre3D)を使用した認識システムの操作を示す3つの例があります。 すべての例は、Visual Studio 2010のソリューションです。
- 追跡可能 -いくつかのSwarp SDKマーカーが含まれています。 今後は、 SquareMarkerCreatorユーティリティを使用して自分でマーカーを作成できると言えます。
- ユーティリティ -SquareMarkerCreator、HID、およびLicenseViewerユーティリティはここにあります。 最後の2つは、製品の登録とインストールされたライセンスの表示に使用されるため、あまり注意を払っていません。 しかし、SquareMarkerCreatorについては別途お話しします。
マーカー
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は新しいアップデートを公開しました。 古いバージョンでは、トライアルモードのアクティブ化でエラーが発生しました。 修正されたようです。 投稿はダウンロードリンクを修正しました。