2012-05-25 56 views
1

我在3D引擎中实施照明,并发现了计算照明方式的缺陷。在合成着色器中,我获得了漫反射颜色和光照计算。计算照明的正确方法

return diffuseColor * (diffuseLight + ambient); 

据我所知,这是做事的标准方式。但是,例如,如果颜色是0,1,0,而光线是1,0,0,那该怎么办。 (在本例中忽略环境) 结果将会是0,0,0。但在现实生活中,如果我得到一张纯净的绿色纸,并且将红色的光照射到它上面,它应该变成黄色。或者至少不是黑色。

其他游戏如何解决这个问题?

+0

我可以发誓,它按照我描述的方式工作。我一定一直在用计算机工作太久,以附加条件考虑颜色。至少我不是唯一一个这样想的人,在我问这里之前咨询了我的朋友。 – Programmdude

回答

0

它应该是(对于每个RGB分量)

return (diffuseColor * diffuseLight) + ambient; 

的环境成分是恒定的,以后的所有其他照明计算已经完成的被添加,并且不依赖于光线方向或观看方向。

正如Julio所说,绿色纸在纯黑红色光下看起来会变黑。

当某物看起来是绿色时,这是因为它吸收了光谱中的所有其他颜色,剩下的(即绿色)被反射。如果你在它上面发出红光,没有绿色可以反射。

+0

实际上,环境光的方向应该不同,因为它不依赖于光线方向或眼睛方向 – Julio

+0

@Julio漫反射光线也不依赖于眼睛方向 - 如果diffuseLight已经乘以余弦表面法线与光线方向之间的角度。 – Alnitak