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

OpenSceneGraph/0_9_X/6.テキストを描画する

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

概要

このページでは、 ''osgText モジュールを使用して テキストを描画するプログラムを示す。

スクリーンショット

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

ソースコード

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

解説

フォントを取得する

テキストを描画するためには、まず最初に描画に使用するフォント(osgText::Font オブジェクト)を取得する必要がある。 フォントを取得しているコードとして filemain.cpp の一部を以下に示す。

static osg::Node* createSceneData() {
	// フォントを取得する
	osgText::Font* font = osgText::readFontFile("fonts/arial.ttf");

	// ...
}

osgText::readFontFile は、ファイル名を指定して osgText::Font オブジェクトを取得する関数である。 使っている OS によってフォントファイルが入っている位置は異なる。 Windows 2000 の場合、fonts/arial.ttf は C:/WINNT/fonts/arial.ttf を表している。 テキストを描画するためには、osgText::readFontFile 関数で取得したフォントを使用する。

テキストを生成する

テキストを描画するためには osgText::Text クラスを使用する。 テキストを表す osg::Node オブジェクトを生成しているコードとして filemain.cpp の一部を以下に示す。

static osg::Node* createSceneData() {
	// フォントを取得する
	osgText::Font* font = osgText::readFontFile("fonts/arial.ttf");

	// テキストを生成する
	osgText::Text* text = new osgText::Text();
	text->setAlignment(osgText::Text::CENTER_CENTER);
	text->setAxisAlignment(osgText::Text::XZ_PLANE);
	text->setFont(font);
	text->setFontResolution(100, 100);
	text->setText("TEXT");
	osg::Geode* textGeode = new osg::Geode();
	textGeode->addDrawable(text);

	return textGeode;
}

osgText::Text クラスは、描画対象となるテキストの属性を設定するためのメソッドをいくつも持っている。 主要な属性を以下に示す。

  • setAlignment

描画位置に対してテキストの配置を設定する。 今回指定した osgText::Text::CENTER_CENTER は、描画位置を中心にテキストを配置する。

  • setAxisAlignment

描画平面を設定する。 今回指定した osgText::Text::XZ_PLANE は、XZ 平面にテキストを描画する。

  • setColor

描画するテキストの色を設定する。

  • setFont

フォントを設定する。

  • setFontResolution

フォントの解像度を設定する。 値が大きければ大きいほど文字が鮮明に描画される。値が小さいと文字がぼやけて描画される。 フォントのサイズと同じにしておけば良いかなという感じ。 ただし、3D空間に配置した文字は拡大(近づいたり)・縮小(遠ざかったり)できるので何らかの処理が必要かもしれない。

  • setText

描画するテキストを設定する。

ビルドのヒント

テキストの描画に osgText モジュールを使用しているため、リンクライブラリに osgText.lib を追加するのを忘れないこと。

以上。

コメント

コメントはありません。 コメント/OpenSceneGraph/0_9_X/6.テキストを描画する

お名前: