如何点亮一个物体,phong模型

时间:2012-11-21 22:47:03

标签: graphics lighting phong

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

1 个答案:

答案 0 :(得分:0)

好的,我看到的东西很少:

  • 不应将环境光和漫反射光相乘,而是使用添加
  • 你不使用任何法线向量或光线方向/位置(至少我无法在任何地方找到它)
  • 你也应该使用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是ModelView,原点设置为[0.0,0.0,0.0](无位置偏移)
  • 如果你还想添加反射率,那么不要忘记计算反射法线...它与漫射光一样是不同的(除非天空盒的大小是无限的)。环境天空盒的立方体贴图也有很大帮助。