Home | Lesson | Game | Tool | Link

4.回転

ポリゴンを回転させます。
前回作ったプログラムを変更していきます。


グローバル変数の用意
ポリゴンを回転させるために、わかりやすいようにグローバル変数を用意しておきます。
using namespace irr;
using namespace core;
using namespace video;
using namespace scene;

f32 rx = 0;
f32 ry = 0;

void makeScene(IVideoDriver *driver)
{

カリング(陰面消去)設定
Irrlichtでは、通常の設定ではカリングON(true)になっています。
これにより処理速度が上がっています。
ただし、回転したポリゴンも表示したい場合があります。
その場合は、カリングOFF(false)にすることで、表面/裏面の両方を描画することができます。
	//属性設定
	SMaterial Material;
	Material.Lighting = false;			//ライト設定
	Material.BackfaceCulling = false;	//カリング設定
	driver->setMaterial(Material);

三角形の回転
三角形をX軸で回転させます。
回転には、setRotationRadiansを使用します。
回転させたらsetTransformでワールドに反映させておきましょう。
	//三角形作成
	u16 triList[] = {0,1,2};
	S3DVertex triVer[3];
	triVer[0] = S3DVertex( 0, 1,0,  0,0,0, 0xFFFF0000, 0,0);//上 :赤
	triVer[1] = S3DVertex( 1,-1,0,  0,0,0, 0xFF00FF00, 0,0);//右下:緑
	triVer[2] = S3DVertex(-1,-1,0,  0,0,0, 0xFF0000FF, 0,0);//左下:青
	mat.setTranslation(vector3df(-2,0,0));//左に2移動
	mat.setRotationRadians(vector3df(rx,0,0));//X軸で回転
	driver->setTransform(ETS_WORLD, mat);//ワールドに反映
	driver->drawIndexedTriangleList(&triVer[0], 3, &triList[0], 1);

四角形の回転
四角形をY軸で回転させます。
回転させたらsetTransformでワールドに反映させておきましょう。
	//四角形作成
	u16 rectList[] = {0,1,2, 1,3,2};
	S3DVertex rectVer[4];
	rectVer[0] = S3DVertex(-1, 1,0,  0,0,0, 0xFFFFFF00, 0,0);//左上:黄
	rectVer[1] = S3DVertex( 1, 1,0,  0,0,0, 0xFFFFFF00, 0,0);//右上:黄
	rectVer[2] = S3DVertex(-1,-1,0,  0,0,0, 0xFFFFFF00, 0,0);//左下:黄
	rectVer[3] = S3DVertex( 1,-1,0,  0,0,0, 0xFFFFFF00, 0,0);//右下:黄
	mat.setTranslation(vector3df(2,0,0));//右に2移動
	mat.setRotationRadians(vector3df(0,ry,0));//Y軸で回転
	driver->setTransform(ETS_WORLD, mat);//ワールドに反映
	driver->drawIndexedTriangleList(&rectVer[0], 4, &rectList[0], 2);

変数の処理
回転するときに使用している変数を変化させておきます。
	rx += 0.002f;
	ry += 0.001f;
}


setInverseRotationRadians
rotationで指定された値だけ回転させます。
void setInverseRotationRadians(
	const vector3df& rotation
)
rotation X/Y/Z軸に対してどれくらい回転させるか指定します。

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

宿題
1.三角形をZ軸で回転してみましょう。
2.四角形をX軸とY軸の両方で回転してみましょう。
3.カリングをON(true)にした場合の処理を確認してみましょう。