グラフィックス(SDL + OpenGL, OpenSceneGraph)

OpenSceneGraph/0_9_X/4.二つの物体を描画する

最終更新: 2015-04-20 (月) 08:44:43 (1495d)

概要

このページでは、二つの物を描画するプログラムを示す。

スクリーンショット

上図は、本サンプルプログラムのスクリーンショットである。

ソースコード

filemain.cppアプリケーションのエントリポイントおよびプログラム全体
fileSampleVC6.zipVC6 のプロジェクト(ソース含む)
fileSampleVC7.zipVC7 のプロジェクト(ソース含む)

解説

osg::Node オブジェクトをグループ化する osg::Group クラス

二つ以上の物体を描画する場合、osg::Group というクラスを使用する。 osg::Group クラスは、複数の osg::Node をグループ化する機能を持っている。 また、osg::Group クラスは osg::Node の一種であるため描画対象とすることができる。 osg::Group オブジェクトを描画対象とした場合、 それによってグループ化した全ての osg::Node が描画対象となる。

本サンプルでは、キューブと球の二つの osg::Geode オブジェクトを構築する。 そして、この二つを osg::Group クラスによりグループ化し描画する。 グループ化を行っているコードとして filemain.cpp の一部を以下に示す。

static osg::Node* createSceneData() {
	osg::Group* scene = new osg::Group();
	scene->addChild(createCube  (osg::Vec3(+5.5f, 0.0f, 0.0f)));
	scene->addChild(createSphere(osg::Vec3(-5.5f, 0.0f, 0.0f)));

	return scene;
}

createCubecreateSphere の二つは、 それぞれキューブと球の osg::Node オブジェクトを構築する関数だ。 この二つの関数は、構築する物体の中心座標を引数として受け取り、その座標を中心座標とした物体を構築する。 osg::Group クラスのオブジェクトである scene オブジェクトは、 キューブと球の二つの osg::Node オブジェクトを addChild メソッドによりグループ化している。 この関数で生成された osg::Group オブジェクトが最終的な描画対象となるため、 キューブと球の二つの物体を描画できる。

シーングラフについて

osg::Group クラスは osg::Node の一種なので、 ある osg::Group オブジェクトが別の osg::Group オブジェクトをグループの要素に含めることができる。 その場合、シーンデータの構造は以下のような木構造となる。

シーングラフ

osg::Group によって作られるこの構造をシーングラフという。 OpenSceneGraph は、このシーングラフを表現し、 与えられたシーングラフを OpenGL を使って画面上に描画する機能を持ったライブラリである。 シーングラフを作ってしまえばその描画はライブラリによって行われるので、 プログラミングの中心は描画したい内容を表すシーングラフを作ることになる。

本サンプルは、以下のようなシーングラフを作成する単純なものである。

本サンプルのシーングラフ

さらにシーングラフを構築する方法を覚えることで、より複雑なシーンを描画できるようになる。

以上。

コメント

コメントはありません。 コメント/OpenSceneGraph/0_9_X/4.二つの物体を描画する

お名前: