Opengl 照明 - 镜面高光是彩色的



我遇到了一个问题,我的镜面照明也是彩色的。在我的代码中,我提到过,光色=环境+漫反射+镜面反射;

碎片颜色 = 身体颜色 * 浅色;

我的镜面光看起来与身体的颜色相同。有人可以帮助我解决这个问题吗?

当然,

它与主体的颜色相同 - 因为您正在对BodyColor进行分量乘法LightColor。这意味着镜面反射高光受到车身颜色的影响与漫反射和环境一样多,这显然不是您想要的。

例如,如果BodyColor[1.0 0.0 0.0] ,又名红色(为了论证起见,让我们忽略 alpha),并且组合的浅色是 [0.8 0.8 0.8] ,又名浅灰色,则:

FragColor = [1.0 0.0 0.0] * [0.8 0.8 0.8] = [0.8 0.0 0.0]

这不完全是红色的。

你永远无法逃脱基于身体颜色和数学的输出。至少,无需经过复杂的划分,即使这样,它也无法使用零组件。

对于您的问题,有许多不同程度的精度解决方案,但最简单的(以及您似乎正在尝试做的)是将主体乘以除镜面反射之外的组合照明,并添加镜面反射:

FragColor = BodyColor * (LightDiffuse + Ambient) + LightSpecular;
镜面

照明代表了一种与漫反射/环境截然不同的现象:它是从表面反射或从表面的薄层反射出来的光(如彩色镜面反射通常表示的那样)。因此,它不应该与身体的颜色相乘。它可以乘以单独的表面镜面反射颜色,但通常不是。

你仍然需要一些相当复杂的线性代数来得出LightSpecular项,因为它不是平坦地应用于表面的,而是取决于相机与物体的角度以及从物体到光线的角度。既然你没有问,我假设你有;尽管由于您可能不知道,因此我建议互联网上有很多关于该主题的页面。

最新更新