3

フォンモデルを使用して照明照明で色をスケーリングする方法を理解しようとしています。たとえば、I = KaAx が与えられた場合、ka は周囲係数、Ax は周囲光の強度で、x は rb または g であり、たとえば (1,0,1) のテクスチャ カラーを持つサーフェスにそれを適用したいと考えています。 . 個々の RGB 値に I (r*Ka*Ar.r,r*Kb*Ag,r*Kg*Ab) 照度を掛けてみましたが、残念ながら、私が望むものではない色を完全に変えることができます。

4

1 に答える 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 に答える