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)にした場合の処理を確認してみましょう。
|
|