opengl - デスクトップ拡張現実アプリケーションの3Dモデル操作

opengl 3d simulation augmented-reality

複数のマーカーを使用して、オーバーレイする予定の3Dモデルの位置を取得する拡張現実プロジェクトに取り組んでいます。 (私はOpenCVを使用して最初からこれを行っており、ARToolkitまたはその他の既製のマーカー検出ライブラリを使用していません)。

環境:Visual C++ 2008、Windows 7、Core2Duo 1GB RAM、OpenCV 2.3

3Dモデルをユーザーが操作して、一種のシミュレーションになるようにしたいのですが。

このため、OpenGLを使用する予定です。あなたの提案、推奨事項は何ですか? OpenGL自体を使用してシミュレーション部分を実行できますか、それともOpenSceneGraph / ODE / Unity 3D / Ogre 3Dなどを使用する必要がありますか?

これは、既成の製品を使用するよりも、自己コーディングシステムを作成できれば、アカデミックプロジェクトに最適です。
答え
OpenGLはあなたのニーズ(特定の色とサイズでモデルを描画する)には十分に思えます。

OpenGLを初めて使用する場合で、将来のプロジェクトで使用しない場合は、照明と色のシステムがすでに準備されていて必要としない、古い固定機能パイプラインを使用する方が簡単な場合があります。シェーダーの書き方を学ぶ。

プロジェクトには、カメラから画像をglTexSubImage2D()を使用してコピーし、次に背景に描画するテクスチャが必要です(または、スケーリングが必要ない場合は、glDrawPixels()を使用できます)。その後、照明の法線を備えたモデルを用意する必要があります。モデルは、例えばすることができます。 Blenderまたは3DS MaxからASCII形式にエクスポートされます。これは解析が非常に簡単です。次に、モデルを描画できます。モデルを描画する前に、glColor3f()を使用して色を変更できます(モデルの描画中に別の色を指定しないようにしてください)。モデルの配置は、行列を使用して行われます。古いOpenGLには、オブジェクトを回転および移動するための便利で使いやすい関数がいくつかあります。オブジェクトをスケーリングする(サイズを変更する)関数もあるので、簡単にカバーできます。必要なのは、マーカーに対するカメラの位置を把握することだけです(これはOpenCVに実装されていると思います)。

上位互換性のあるOpenGLを使用する場合は、頂点バッファーオブジェクトを設定してモデルデータを含め、頂点シェーダーとフラグメントシェーダーを記述してモデルをシェーディングおよび表示する必要があります。これは、柔軟性を高めるためのちょっとした作業です。ただし、必要に応じて、シェーダーを古いOpenGLで使用することもできます(たとえば、いくつかの特殊効果のため)。

シーングラフまたはエンジン(ogre)の使用方法を習得するには時間がかかる場合があります。タスクにはお勧めしません。
関連記事

c++ - GL_DRAW_FRAMEBUFFERターゲットを使用すると、glBindFramebufferが「無効な操作」GLエラーを引き起こす

c++ - VM内でのOpenGL 2.1の使用

opengl - 3Dポイントを2Dスクリーン座標に投影するOpenTK

opengl - OpenGL頂点バッファーが描画されない(LWJGL)

c++ - OpenGL 2.1でのglDrawRangeElementsの使用

opengl - JOGLテクスチャの問題

c++ - SDL OpenGL C++の問題

java - Javaで「ウォーターフォール」シミュレーションを実装する

opengl - OpenGL描画時間

java - openGL / JOGL:一部のテクスチャが「スムーズ」にレンダリングされ、一部がレンダリングされないのはなぜですか?