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

OpenSceneGraph/0_9_X/3.キューブにテクスチャを貼り付ける

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

概要

このページでは、OpenSceneGraph によるテクスチャの例として テクスチャを貼り付けたキューブを描画するプログラムを示す。

スクリーンショット

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

ソースコード

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

解説

テクスチャを貼り付ける

OpenSceneGraph には、 テクスチャを表す osg::Texture2D というクラスが用意されているので、 キューブにテクスチャを貼り付けることはとても簡単だ。 キューブにテクスチャを貼り付けるための大まかな手順を以下に示す。

  • テクスチャに使用する画像を読み込む。
  • テクスチャを生成する。
  • キューブにテクスチャを貼り付ける。

対応するコードとして filemain.cpp の一部を以下に示す。

static osg::Node* createSceneData() {
	// ...

	// テクスチャに使用する画像を読み込む
	osg::Image* image = osgDB::readImageFile("texture.png");
	if (image) {
		// テクスチャを生成する
		osg::Texture2D* texture = new osg::Texture2D();
		texture->setImage(image);

		// キューブにテクスチャを設定する
		osg::StateSet* stateSet = cube->getOrCreateStateSet();
		stateSet->setTextureAttributeAndModes(0, texture, osg::StateAttribute::ON);
	}

	// ...
}

osgDB::readImageFile メソッドを使うと、任意の画像ファイルを読み込むことができる。 画像の読み込みに成功した場合、osg::Image オブジェクトを取得できる。 画像の読み込みに失敗した場合、osgDB::readImageFile メソッドは 0(NULL) を返す。 if (image) は、画像の読み込みに成功した場合のみ *1 テクスチャを設定するための条件判定である。 画像の読み込みに成功した場合、テクスチャを生成し、読み込んだ画像をテクスチャに設定する。 そして、最後にそのテクスチャをキューブに設定する。

ビルドのヒント

画像の読み込みに osgDB モジュールを使用しているため、リンクライブラリに osgDB.lib を追加するのを忘れないこと。

以上。

コメント

最新の10件を表示しています。 コメントページを参照

  • VC7 の場合は大丈夫なんだけど、VC6 の場合が実はまだ成功していない。テクスチャが張られていないキューブが描画されてしまーう。原因は、ライブラリのコンパイルに問題があるんじゃないかな-とかって思ったりして。 -- トゥイー(管理者) 2004-09-16 (木) 00:03:00
お名前: