我试图弄清楚如何使用 phong 模型通过照明照明来缩放颜色。例如,给定 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
好的,我看到了几件事:
- 环境光和漫射光不应相乘,而是使用加法
- 您不使用任何法线矢量或光线方向/位置(至少我无法在任何地方找到它)
- 你也应该使用 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 !!!
)
);
PS。
- NormalMatrix 是模型视图,原点设置为 [0.0,0.0,0.0](无位置偏移)
- 如果您还想添加反射率,那么不要忘记计算反射法线......它与用于漫射光的不同(除非天空盒的大小是无限的)。带有环境天空盒的立方体贴图也有很大帮助。
于 2014-01-14T21:57:33.997 回答