フォンモデルを使用して照明照明で色をスケーリングする方法を理解しようとしています。たとえば、I = KaAx が与えられた場合、ka は周囲係数、Ax は周囲光の強度で、x は rb または g であり、たとえば (1,0,1) のテクスチャ カラーを持つサーフェスにそれを適用したいと考えています。 . 個々の RGB 値に I (r*Ka*Ar.r,r*Kb*Ag,r*Kg*Ab) 照度を掛けてみましたが、残念ながら、私が望むものではない色を完全に変えることができます。
質問する
239 次
1 に答える
0
OK、いくつかのことがわかります:
- アンビエント ライトとディフューズ ライトを一緒に乗算してはいけません。代わりに加算を使用してください。
- 法線ベクトルまたは光の方向/位置を使用しません(少なくともどこにも見つかりません)
- また、glColor パラメータを使用する必要があります (まったく使用しない場合を除きます)。
各色 (.r、.g、.b) と Sun のようなディレクショナル ライトでこれを試してください。
pixel_color.r=clamp_to_1 // clamp to <0.0,1.1>
(
texture_color.r*glColor.r // pixel color without lighting
*( // apply lighting
diffuse.r*((glNormal.xyz*NormalMatrix).light_dir.xyz) // diffuse * dot product of light source direction and normal vectors. If you need also consider distance just multiply by next term...
+ambient.r // ambient light is additive !!!
)
);
PS。
- NormalMatrix は原点が [0.0,0.0,0.0] に設定された ModelView です (位置シフトなし)
- 反射率も追加したい場合は、反射法線を計算することを忘れないでください...拡散光に使用されるものとは異なります(スカイボックスのサイズが無限でない限り)。また、環境スカイボックスを備えたキューブマップも大いに役立ちます。
于 2014-01-14T21:57:33.997 に答える