计算像素的镜面反射值?

时间:2015-03-28 17:40:24

标签: opengl math graphics rgb raytracing

我一直在互联网上寻找计算公式来计算光线跟踪器中给定像素的漫反射值(当然发生了光线交叉)。

我发现的例子都涉及用其他颜色乘以颜色。 Nvidia的公式如下:

diffuse = Kd x lightColor x max(N · L, 0)

其中:

- Kd is the material's diffuse color
- lightColor is the color of the incoming diffuse light
- N is the normalized surface normal
- L is the normalized vector toward the light source
- P is the point being shaded

这个公式对我来说似乎并不太难,但在尝试编程时,我发现Kd x lightColour是2个RGB值的乘法。这让我感到困惑,因为除非只是将R,G和B值相乘,否则就无法将这样的值相乘。

类似地,镜面公式要求将RGB值提高到等于材料的光泽因子的功率,这又是3分量数据类型本身的乘法。

这可能只是让我对数学感到困惑,但是如果有人能够清楚这一点,那就非常感激了。

1 个答案:

答案 0 :(得分:3)

Kd x lightColour是一个分量乘法:

  a       d       a*d
[ b ] x [ e ] = [ b*e ]
  c       f       c*f

在镜面照明的公式中(假设您正在讨论phong或blinn-phong照明模型),矢量上没有动力操作。

specular = ks x lightcolor x (R · V)^a

R · V的结果是浮点数,因此功效仅适用于单个数字。