×

[PR]この広告は3ヶ月以上更新がないため表示されています。
ホームページを更新後24時間以内に表示されなくなります。

Home | Lesson | Game | Tool | Link

7.ライティング

光源を用意して、ポリゴンに光を当てます。
物体に明暗が生まれて、より立体的に見えるようになります。


テクスチャ座標設定
光源により、各面の明るさが変わるのをわかりやすくするために
各面のテクスチャを変更します。006の応用になります。
void makeScene(IVideoDriver *driver)
{
	matrix4 mat;
	f32 a = 1.0f;
	f32 b = 0.125f;
	f32 c = 0.25f;
	f32 d = 0.375f;
	f32 e = 0.5f;
	f32 f = 0.625f;
	f32 g = 0.75f;

ライティング設定
光源を使用するので、マテリアルで設定しているライティングは削除しておきます。
または、「ON(true):光源の影響を受ける」にしておきます。
	//テクスチャ読み込み
	ITexture* Texture;
	Texture = driver->getTexture("data.png");
	SMaterial Material;
//	Material.Lighting = false;
	Material.TextureLayer[0].Texture = Texture;
	driver->setMaterial(Material);

テクスチャと法線の設定
S3DVertexの法線を設定します。
法線とはどの方向を向いているかです。
法線の値が正しくないと、光の影響が正しく反映されないので注意してください。
また、各面に個別にテクスチャを貼り付けます。
ここでは1面しか設定していませんが、実際は6面分設定します。
	S3DVertex ver2[24];
	ver2[ 0] = S3DVertex(-1, 1,-1,  0,0,-1, 0xFFFFFFFF, f,0);//前左上6
	ver2[ 1] = S3DVertex( 1, 1,-1,  0,0,-1, 0xFFFFFFFF, g,0);//前右上
	ver2[ 2] = S3DVertex(-1,-1,-1,  0,0,-1, 0xFFFFFFFF, f,a);//前左下
	ver2[ 3] = S3DVertex( 1,-1,-1,  0,0,-1, 0xFFFFFFFF, g,a);//前右下

光源の設定
main関数に、光源を設定します。
光源の位置は、モニタの手前にセットします。(ここでは、カメラの後ろに光源をセットします。)
	device->setWindowCaption(L"IrrLicht");//ウインドウタイトル設定

	//ライト
	smgr->addLightSceneNode(0, vector3df(0,0,-10), SColorf(0xFFFFFFFF), 10.0f);

	//カメラ設定
	smgr->addCameraSceneNode(0, vector3df(0,0,-5), vector3df(0,0,0));

	while(device->run())
	{


addLightSceneNode
光源を追加します。
ILightSceneNode* addLightSceneNode(
	ISceneNode*      parent   = 0,  
	const vector3df& position = vector3df(0, 0, 0),  
	SColorf          color    = SColorf(1.0f, 1.0f, 1.0f),  
	f32              radius   = 100.0f,  
	s32              id       = -1 
)
parent   光源の親を設定します。親が動けば、光源も動きます。
position 光源の位置を設定します。
color    光源の色(ディフューズカラー)を設定します。
         アンビエントカラーやスペキュラカラーはgetLightData()で設定します。
radius   光源の角度を設定します。
id       光源のIDを設定します。


太陽を作る
ワールドの中心にノードを用意して、そこから一定距離離れた位置に光源を設定します。
一定時間でノードを回転させることで、太陽のように光源を回転させることが可能です。

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

宿題
1.光源の色を赤や黄色にしてみましょう。