Home | Lesson | Game | Tool | Link

B02.ノード

ノードを使用して立方体や球を表示します。


グローバル変数用意
わかりやすいようにグローバル変数で用意しておきます。
f32 rx = 0;
f32 ry = 0;
ISceneNode* node[3];

図形描画
立方体/直方体/球のマテリアルなどを設定します。
ポリゴンで作成したときと同じ手順です。
void makeScene(IVideoDriver *driver)
{
	//立方体
	node[0]->setMaterialTexture(0, driver->getTexture("wall.bmp"));
	node[0]->setMaterialFlag(EMF_LIGHTING, false);	
	node[0]->setMaterialFlag(EMF_ZBUFFER, false);	
	node[0]->setMaterialFlag(EMF_BACK_FACE_CULLING, false);	
	node[0]->setMaterialType(EMT_TRANSPARENT_ADD_COLOR);	
	node[0]->setPosition(vector3df(-2,0,0));
	node[0]->setRotation(vector3df(rx,ry,0));

	//直方体
	node[1]->setMaterialTexture(0, driver->getTexture("wall.bmp"));
	node[1]->setMaterialFlag(EMF_LIGHTING, false);	
	node[1]->setMaterialFlag(EMF_BACK_FACE_CULLING, false);	
	node[1]->setPosition(vector3df(1,0,0));
	node[1]->setRotation(vector3df(0,ry,0));

	//球
	node[2]->setMaterialTexture(0, driver->getTexture("wall.bmp"));
	node[2]->setMaterialFlag(EMF_LIGHTING, false);	
	node[2]->setPosition(vector3df(3,0,0));
	node[2]->setRotation(vector3df(rx,0,0));

	rx += 0.02f;
	ry += 0.01f;
}

ノード作成
add〜を使用してノードを作成します。
作成する際に大きさや表示場所などを指定できます。
	//ノードの作成
	node[0] = smgr->addCubeSceneNode(2.0f);		//立方体
	node[1] = smgr->addCubeSceneNode(1.0f,0,-1,vector3df(0,0,0),
		vector3df(0,0,0),vector3df(1.0f,2.0f,1.0f));	//直方体
	node[2] = smgr->addSphereSceneNode(1.0f);		//球


addCubeSceneNode
直方体ノードを追加します
ISceneNode* addCubeSceneNode(
	f32              size     = 10.0f,
	ISceneNode*      parent   = 0,
	s32              id       = -1,
	const vector3df& position = vector3df(0, 0, 0),
	const vector3df& rotation = vector3df(0, 0, 0),
	const vector3df& scale    = vector3df(1.0f, 1.0f, 1.0f)
)
size     大きさを指定します。
parent   親を指定します。親が動けば一緒に動きます。
id       IDを指定します。
position 表示位置を指定します。
rotation 回転を指定します。
scale    拡大縮小率を指定します。全て等しい場合は立方体になります。

初期サイズは10と割と大きいので注意してください。


addSphereSceneNode
球ノードを追加します
ISceneNode* addSphereSceneNode(
	f32              radius    = 5.0f,
	s32              polyCount = 16,
	ISceneNode*      parent    = 0,
	s32              id        = -1,
	const vector3df& position  = vector3df(0, 0, 0),
	const vector3df& rotation  = vector3df(0, 0, 0),
	const vector3df& scale     = vector3df(1.0f, 1.0f, 1.0f)
)
radius    半径を指定します。
polyCount 分割数を指定します。
parent    親を指定します。親が動けば一緒に動きます。
id        IDを指定します。
position  表示位置を指定します。
rotation  回転を指定します。
scale     拡大縮小率を指定します。


ノード
立方体も球も、モデルもノードとして扱われます。
これの利点としては、全て同じ方法で操作できることです。
移動も回転も、操作方法がわかればどれにでも適用できます。
また、IDを割り当てることで、IDから位置も取得できるので、
レーダーを作成して、そこに表示することも可能です。

もし、ポリゴンだけで作成していた場合は、ポリゴン1つずつを移動させたり
どこを基準にして、どれに対してIDを振り当てるか…などと考えてしまうでしょう。

ノードで何ができるかは、ISceneNodeを参照してください。

ダウンロード
今回作成したファイル一式です。

宿題
1.大きな板ノードを作成して、そこに球を配置してみましょう。