OpenSceneGraphというのは、オープンソースのコンピュータ・グラフィックス用ライブラリで、Windows、Mac、Linux等の各種環境で動作します。OpenGLとC++をサポートしています。
OpenSceneGraphのサイトは以下のとおり。
http://www.openscenegraph.org/projects/osg
「シーングラフ」というのはCGの3Dオブジェクト間の関係を木構造で表す概念だそうです。
乱暴に説明すると、例えば道路というノードの下に車というノードがあり、その下にタイヤというノードが関連付けられてるとします。例えば道路の上を車を移動させると、その車の移動に合わせてタイヤも一緒に動きます。また車ノードを削除すればタイヤノードも一緒に削除されますし、車ノードを自転車ノードと置き換えてあげれば、車があった位置に自転車が表示されるようになります。
ここらへんの説明がわかりやすいかと。
http://grace4.solid.ad.jp/~javao/j3dbook/firstbook/text/node19.html
http://www.stackedboxes.org/~lmb/asittbpo-open-scene-graph/chapter-1-the-basics/
僕はCGに関しては初心者ですが、簡単に3次元モデルファイルを読み込んで表示してくれるライブラリはないかと探していたところ見つけました。このOSGは3dc、3ds、flt、geo、iv、ive、lwo、md2、objなどの各種フォーマットをサポートしています。
というわけで、このOSGのインストール手順と、これらのモデルを読み込んで表示するまでの簡単なプログラムを書きたいと思います。
僕が構築した環境は以下のとおり
- OS: Windows 7
- IDE: Visual Studio 2010 Express Edition
CMakeのインストール
まずインストールにはCMakeを使うため、以下のサイトからダウンロードし&インストールして下さい。ダウンロードして、解凍して、実行して、指示に従えばあっという間にできると思います。
http://www.cmake.org/
ここではVersion 2.8.3を使用しました。
OpenSceneGraphのダウンロード
OpenSceneGraphはここから取ってこれます。
http://www.openscenegraph.org/projects/osg/wiki/Downloads
ここでは、OpenSceneGraph-2.8.3.zipをダウンロードしました。
次に、このzipファイルを解凍して、フォルダをどこか適当なところにコピーします。
例:C:\OpenSceneGraph-2.8.3
CMakeによるビルド環境構築
CMakeを起動します。
「スタートメニュー」→「すべてのプログラム」→「CMake 2.8」→「CMake(cmake-gui)」
ここでは、
"Where is the source code:"に"C:/OpenSceneGraph-2.8.3"
"Where to build the binaries:"に"C:/OpenSceneGraph-2.8.3/build"(このフォルダは自分で作成)
と指定しました。
次にConfigureボタンを押します。赤いラインがなくなるまで繰り返し押します。
赤いラインがなくなったら、Generateボタンを押します。
OpenSceneGraphのビルド
CMakeによって作成されたソリューションファイルを起動します。この例では、
C:/OpenSceneGraph-2.9.8/build/OpenSceneGraph.sln
を起動します。
これを、そのままコンパイルすると、
3>..\..\..\src\osg\GraphicsContext.cpp(680): error C2039: 'back_inserter' : 'std' のメンバーではありません。
このようなエラーが大量にでるので、ソースに一部修正を加えます。
そこで、
http://forum.openscenegraph.org/viewtopic.php?t=6248
を参考に
osgプロジェクトのHeader Files下
NodeCallBack
の頭と
String.cpp
の頭に
#include
をいれます。
開発環境の構築
VC++2010の新規プロジェクトを作成します。ここではWin32コンソールアプリケーションを作成しました。
プロジェクト名を仮に「OSCtest」とします。
ソリューションエクスプローラーの「OSCtest」を右クリックして、「プロパティ」を選択します。
「追加インクルードディレクトリ」にここでは
- C:\OpenSceneGraph-2.8.3\include
- C:\OpenSceneGraph-2.8.3\build\include
「追加ライブラリディレクトリ」に
Dubugモード:
- C:\OpenSceneGraph-2.8.3\build\lib\Debug
Releaseモード:
- C:\OpenSceneGraph-2.8.3\build\lib\Release
「追加の依存ファイル」に
- osgd.lib
- osgViewerd.lib
- osgGAd.lib
- osgDBd.lib
次に
- C:\OpenSceneGraph-2.9.8\build\bin\Debug
- C:\OpenSceneGraph-2.9.8\build\bin\Release
からdllをmainのソースファイルと同じフォルダか、または"<開発ホーム>\Debug"と"<開発ホーム>\Release"にそれぞれコピーします。
以上で開発の準備が整いました。
3Dモデルの読み込みと表示
どうやってコードを書くかは、このチュートリアルからはじめるのが良さそうです。
http://www.openscenegraph.org/projects/osg/wiki/Support/Tutorials
これを参考に、OBJファイルを表示させるプログラムを作りました。
OBJファイルは、以下のサイトから取ってきました。
http://www.oyonale.com/modeles.php?lang=en&page=53
ソース
#include#include #include #include #include #include int main() { osg::Node* duckNode = NULL; osg::Group* root = NULL; osgViewer::Viewer viewer; osg::Vec3 duckPosit; osg::PositionAttitudeTransform* duckXform; duckNode = osgDB::readNodeFile("ducky.obj"); root = new osg::Group(); duckXform = new osg::PositionAttitudeTransform(); root->addChild(duckXform); duckXform->addChild(duckNode); duckPosit.set(5,0,0); duckXform->setPosition( duckPosit ); viewer.setCameraManipulator(new osgGA::TrackballManipulator()); //viewer.setUpViewer(osgProducer::Viewer::STANDARD_SETTINGS); viewer.setSceneData( root ); viewer.realize(); while( !viewer.done() ) { viewer.frame(); } }