光源の設定

 前回のサンプルは光源…光がないので薄暗い感じになっていました。
てことで光源も必須なわけです。

光の設定の方法は、E3DCreateLightで光源を作成して、次に作成した光源の種類とパラメータを設定します。 E3DSetPointLight
E3DSetSpotLight
E3DSetDirectionalLight
などで設定します。
ライトの種類と性質は次のような感じです。
HSP命令 ライトの種類 性質
E3DSetPointLight ポイントライト 点光源。
ろうそくの光や豆電球の光など、指向性のない光。
E3DSetSpotLight スポットライト 懐中電灯のような指向性のある光。
E3DSetDirectionalLight 平行光 平行に降り注ぐ光のこと。
光源がものすごく遠い場合、光はほとんど平行に降り注ぎます。身近なところで、太陽光がこれです。

E3DCreateLightはメインループの外に置いてください。でないとループのたびに光源を量産しつづけることになります。
E3DSetDirectionalLightなどはループの中でも外でもどちらでもokです。



サンプル

前回のタコのモデルを表示させるだけのサンプルに光源を設定しました。
タコのモデルファイルはEasy3Dのサンプルにtako.sigというファイル名で含まれています。
tako.sigとtako01.bmpを下記サンプルと同じフォルダ内に入れてから実行してください。

前回のサンプルに追加した部分を赤色で表示してあります。


;
;	ライトを設定する
;

#include "e3dhsp.as"

	;
	;	初期化
	;
	E3DInit

	;
	;	形状データのロード
	;
	sdim mediadir, 2048
	mediadir = curdir + "\\tako.sig"
	E3DSigLoad mediadir, hsid1
	E3DSetPos hsid1, 0, 0, 0
	frameno1 = 0	;モーションは使用しない。
;///////////////// ; ; ライトの設定 ; E3DCreateLight lid1 ;光源を作成 lightdirx1 = 1 ;平行光の向き lightdiry1 = -1 lightdirz1 = 0 lightr1 = 255 ;平行光の色 lightg1 = 255 lightb1 = 255 E3DSetDirectionalLight lid1, lightdirx1, lightdiry1, lightdirz1, lightr1, lightg1, lightb1 ;光源を平行光源に設定
; ; メインループ ; *main E3DChkInView hsid1 ;モデルが、視野内にあるか判定 E3DBeginScene ;-----シーンスタート ;バックバッファへの書き込み作業を行う stick key if key&128 : goto *bye E3DRender hsid1, 0, frameno1, 0 ;バックバッファにレンダリングする。(タコ描画) E3DEndScene ;-----シーン終了 E3DPresent ;バックバッファの内容を、プライマリバッファに転送。描画する。 E3DWaitbyFPS 60 : await 0 goto *main ; ; 終了処理 ; *bye E3DDestroyLight lid1 ;ライトを破棄 E3DBye end



実行結果のサンプル画像 実行結果はこんな感じになります。
E3DSetDirectionalLightで平行光としています。
光の進む方向は(1,-1,0)としているので、太陽光が画面右上から左下に降り注ぐような感じになっています。



- HOME -

GHP(仮)