Graphics 如何照亮对象,phong模型

Graphics 如何照亮对象,phong模型,graphics,lighting,phong,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)照明度,但遗憾的是,它可以完全改变颜色,这不是我想要的 好的,我看不到什么: 环境光和漫反射光不应相乘,而应使用加法 您不使用任何法向量或灯光方向/位置(至少我在任何地方都找不到) 您还应该使用glColor参数(除非您根本不使

我正试图找出如何使用phong模型根据灯光照明缩放颜色。例如,给定I=KaAx,其中ka是环境系数,Ax是环境照明强度,其中x可以是rb或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 !!!  
  )
 );
pixel\u color.r=climp\u to\u 1//climp to
(
纹理\u color.r*glColor.r//无照明的像素颜色
*(//应用照明
漫射R*((Galth.Xyz * NormalMatrix).Lyxydi.XYZ)//扩散*光源方向和正常矢量的点积。如果你还需要考虑距离,只需乘以下一个学期…
+环境光。r//环境光是可加的!!!
)
);
附言

  • NormalMatrix是原点设置为[0.0,0.0,0.0]的ModelView(无位置偏移)
  • 如果您还想添加反射率,那么不要忘记计算反射法线。。。它与漫射光不同(除非天空盒的大小是无限的)。另外,带有Environment skybox的cubemap帮助很大