Foundation > イメージ処理フィルター > IlvBitmapFilter:イメージ処理クラス > IlvLightingFilter クラス
 
IlvLightingFilter クラス
IlvLightingFilter クラスは、アルファ・チャネルをバンプ・マップとして使用してイメージを明るくします。明るさのタイプはいくつか指定できます (後の説明を参照)。
このクラスは抽象クラスで、使用可能なサブクラスが 2 つあります。
IlvDiffuseLightingFilter クラス
IlvDiffuseLightingFilter クラスでは、新しいイメージは光源色に基づいた不透明な RGBA イメージで、アルファ値はどこでも 1.0 になります。明るさの計算は、Phong ライト・モデルの標準散光コンポーネントに従っています。新しいイメージは、光源色、光源位置、入力バンプ・マップの平面ジオメトリーに基づきます。
このフィルター・プリミティブで作成されたライト・マップは、IlvComposeFilter 合成計算メソッドの乗算項を使用してテキスチャ・イメージと組み合わせることができます。これをテキスチャ・イメージに適用する前にこれらのライト・マップのいくつかをまとめて追加することにより、複数の光源をシミュレートできます。
結果としてできる RGBA イメージは、次のように計算されます。
Dr = kd * N.L * Lr
Dg = kd * N.L * Lg
Db = kd * N.L * Lb
Da = 1.0
ここで:
kd
散光定数
N
平面の通常の単位ベクトル、x と y の関数 (下記を参照)
L
平面から光源までを示す単位ベクトル、点とスポット・ライトの場合は x と y の関数
Lr, Lg, Lb
光源の RGB コンポーネント、スポット・ライトの場合は x と y の関数
N は x と y の関数で、次のように平面の階調によって異なります。
入力アルファ・イメージ Ain (x,y) で表される平面は、次のとおりです。
Z (x,y) = surfaceScale * Ain (x,y)
通常の平面は、Sobel 階調 3x3 フィルターを使って次のように計算されます。
Nx (x,y)= - surfaceScale * 1/4*(( I(x+1,y-1) + 2*I(x+1,y) + I(x+1,y+1))
- (I(x-1,y-1) + 2*I(x-1,y) + I(x-1,y+1)))
 
Ny (x,y)= - surfaceScale * 1/4*(( I(x-1,y+1) + 2*I(x,y+1) + I(x+1,y+1))
- (I(x-1,y-1) + 2*I(x,y-1) + I(x+1,y-1)))
 
Nz (x,y) = 1.0
 
N = (Nx, Ny, Nz) / Norm((Nx,Ny,Nz))
イメージ・サンプルから光源までの単位ベクトルである L の詳細については、IlvLightSource を参照してください。
IlvSpecularLightingFilter クラス
IlvSpecularLightingFilter では、新しいイメージは光源色に基づく RGBA イメージになります。明るさの計算は、Phong ライト・モデルの標準スペキュラー・コンポーネントに従っています。新しいイメージは、光源色、光源位置、入力バンプ・マップの平面ジオメトリーに基づきます。明るさの計算の結果が追加されます。フィルターのプリミティブは、視点が限りなく z 方向であると仮定します
(すなわち、視点方向の単位ベクトルはどこでも (0,0,1) となっています)。
このフィルター・プリミティブは、ライティング計算のスペキュラー・リフレクション部分を含むイメージを生成します。このようなマップは、IlvComposeFilter 計算メソッドの加算項を使用したテキスチャと組み合わされます。これをテキスチャ・イメージに適用する前にこれらのライト・マップのいくつかを追加することにより、複数の光源をシミュレートできます。
結果としてできる RGBA イメージは、次のように計算されます。
Sr = ks * pow(N.H, specularExponent) * Lr
Sg = ks * pow(N.H, specularExponent) * Lg
Sb = ks * pow(N.H, specularExponent) * Lb
Sa = max(Sr, Sg, Sb)
ここで:
ks
スペキュラー・ライティング定数
N
平面の通常の単位ベクトル、x と y の関数 (下記を参照)
H
視点の単位ベクトルと光源の単位ベクトルの間の「中間」単位ベクトル
Lr, Lg, Lb
光源の RGB コンポーネント
N および (Lr, Lg, Lb) の定義については、IlvDiffuseLightingFilter を参照してください。
H の定義は、一定の視点ベクトルのここでの仮定を次のように反映しています。
E = (0,0,1):
H = (L + E) / Norm(L+E)
ここで、L は光源の単位ベクトルです。

Version 6.0
Copyright © 2015, Rogue Wave Software, Inc. All Rights Reserved.