Ninja Library - モデル・インテンシティー関数

njCnkSetIntensityLightMode

インテンシティライトの種類の設定

書式

void njCnkSetIntensityLightMode( eLight, eMode )
NJD_CNK_INTENSITY_LIGHT eLight
NJD_CNK_INTENSITY_MODE eMode

引数

eLight   ライト番号
eMode   ライト種類

戻り値

なし

解説

インテンシティライトの種類を設定します。

ライト番号にはNJD_CNK_INTENSITY_LIGHT_0〜7が指定できます。 ライトの種類は以下の3つがあります。

 定義   意味 
 NJD_CNK_INTENSITY_MODE_DIR   平行光源 
 NJD_CNK_INTENSITY_MODE_POINT   点光源 
 NJD_CNK_INTENSITY_MODE_DIR_POINT   平行点光源 


用例

njCnkSetIntensityLightMode( NJD_CNK_INTENSITY_LIGHT_0, NJD_CNK_INTENSITY_MODE_DIR       );
njCnkSetIntensityLightMode( NJD_CNK_INTENSITY_LIGHT_1, NJD_CNK_INTENSITY_MODE_POINT     );
njCnkSetIntensityLightMode( NJD_CNK_INTENSITY_LIGHT_2, NJD_CNK_INTENSITY_MODE_DIR_POINT );


備考

平行点光源とはモデルの方向を向く平行光源です。

■ライトの計算

ディフューズの合計値を初期化
TotalDiff = 0.f

スペキュラの合計値を初期化
TotalSpec = 0.f

(1)平行光源と平行点光源の場合
i = Normal・Vector

頂点の法線と光源ベクトルとの内積/結果が負の場合は計算打ち切り


TotalDiff += Diff * i
Diffはディフューズ強度


TotalSpec += Spec * i^Exp
Specはスペキュラ強度、Expはエクスポーネント

(2)点光源の場合
i = Normal・Vector
頂点法線と光源から頂点へのベクトルとの内積/結果が負の場合は計算打ち切り/距離がファーレンジを超えている場合は打ち切り


d = Diff * i

Diffはディフューズ強度
s = Spec * i^Exp
Specはスペキュラ強度、Expはエクスポーネント

距離がニアレンジ内のときは次の減衰処理はスキップ
d *= i * Near * Near / Range * Range
s *= i * Near * Near / Range * Range
距離の2乗で割って減衰させた後にニアを掛ける


TotalDiff += d
TotalSpec += s

以上の計算を光源毎にやったあとに


TotalDiff += OffsDiff

OffsDiffはディフューズのオフセット値


TotalSpec += OffsSpec

OffsSpecはスペキュラのオフセット値

最終的な頂点カラーは以下のようになります。

ディフューズカラー
α = マテリアルのα
R = DiffColor.R * TotalDiff
G = DiffColor.G * TotalDiff
B = DiffColor.B * TotalDiff

スペキュラカラー
R = SpecColor.R * TotalSpec
G = SpecColor.G * TotalSpec
B = SpecColor.B * TotalSpec


参照

njCnkSetIntensityLightSwitch() インテンシティライトのオンオフ
njCnkSetIntensityLightVector() インテンシティライトの平行光源のベクトルの設定
njCnkSetIntensityLightPoint() インテンシティライトの点光源、平行点光源の位置の設定
njCnkSetIntensityLightExp() インテンシティライトのエクスポーネントを設定します
njCnkSetIntensityLightSet() インテンシティライトの強度の設定
njCnkSetIntensityLightRange() インテンシティライトの点光源のレンジの設定
njCnkSetIntensityLightDiffColor() インテンシティライトのディフューズカラーを設定します。
njCnkSetIntensityLightSpecColor() インテンシティライトのスペキュラカラーを設定します。
njCnkSetIntensityLightOffset() インテンシティライトのオフセットを設定します。
njCnkSetIntensityLightConst() インテンシティライトのコンスト値を設定します。
njCnkSetIntensityLightEnvRatio() インテンシティライトの環境マップの比率の設定

njCnkSetIntensityLightMode
COPYRIGHT © SEGA ENTERPRISES, LTD., 1998-2000