如何照亮物体,Phong模型



我正在尝试弄清楚如何使用phong模型使用照明照明缩放颜色。 例如,给定I = KaAx,其中ka是环境系数,Ax是环境照明强度,其中x可以是r b或g,例如,我想将其应用于纹理颜色为(1,0,1)的表面。 我尝试将单个 rgb 值乘以 I,(r*Ka*Ar.r,r*Kb*Ag,r*Kg*Ab)照明,但唉,它可以完全改变颜色,这不是我想要的。

好的,

我看到几件事:

  • 环境光和漫射光不应相乘,而应使用加法
  • 您不使用任何正常的矢量或光方向/位置(至少我在任何地方都找不到)
  • 您还应该使用 glColor 参数(除非您根本不使用它)

尝试对每种颜色(.r,.g,.b)和定向光(如太阳)进行此操作:

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 !!!  
  )
 );

附言。

  • NormalMatrix 是原点设置为 [0.0,0.0,0.0] 的模型视图(无位置偏移)
  • 如果您还想添加反射率,请不要忘记计算反射法线...它与用于漫射光不同(除非天空盒的大小是无限大的)。还有带有环境天空盒的立方体地图帮助很大。

相关内容

  • 没有找到相关文章

最新更新