Home | Lesson | Game | Tool | Link

B05.親子関係

親子関係を設定すると、地球や月のようなものも作成できます。
アニメーションを作成したい場合も有効になるでしょう。


地球と月を作成
地球と月、ちょっと寂しいので大気も追加します。
地球はY軸で回転するのみです。

大気は地球と同じ場所です。
地球の子なので、地球と同じように回転していますが、さらに回転させます。
半透明にすることにより、大気の流れを表現可能です。

月は地球から2離れた場所に配置します。
地球の子なのでやはり回転しますが、2離れているので地球の回りを回ります。
自転もさせるために、さらに回転させます。
f32 ry = 0;
ISceneNode* node[3];

void makeScene(IVideoDriver *driver)
{
	//地球
	node[0]->setMaterialTexture(0, driver->getTexture("earth.bmp"));
	node[0]->setPosition(vector3df(0,0,0));
	node[0]->setRotation(vector3df(0,ry,0));

	//大気
	node[1]->setMaterialTexture(0, driver->getTexture("cloud.png"));
	node[1]->setMaterialType(EMT_TRANSPARENT_ADD_COLOR);	//透過
	node[1]->setPosition(vector3df(0,0,0));
	node[1]->setRotation(vector3df(0,ry,0));

	//月
	node[2]->setMaterialTexture(0, driver->getTexture("wall.bmp"));
	node[2]->setPosition(vector3df(2,0,0));
	node[2]->setRotation(vector3df(0,ry*3,0));

	ry += 0.02f;
}

ノード作成
地球を半径1で作成します。
大気は地球よりやや大きくして、親を地球に設定します。
月はかなり小さくして、親を地球に設定します。
	//ノードの作成
	node[0] = smgr->addSphereSceneNode(1.0f);			//地球
	node[1] = smgr->addSphereSceneNode(1.02f, 16, node[0]);	//大気
	node[2] = smgr->addSphereSceneNode(0.2f,  16, node[0]);	//月


太陽系を作る
地球の親を太陽にし、さらに水星/金星/火星なども用意すれば太陽系を作成することもできます。
回転角度が違う惑星がありますが、その場合は太陽の位置に透明なノードを用意して、
それを親に設定すれば解決します。


カメラも親子関係に
フライトシミュレータなどで時機を親としてカメラを設定すると
時機を追尾するカメラになります。
setActiveCameraでカメラを切り替えれば、敵側の視点などにもできます。

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

宿題
1.太陽系を作成してみましょう。