1. 颜色向量:数字世界中的调色板
在计算机图形学中,颜色向量就像数字世界的调色板。我们用三维向量(R,G,B)来表示颜色,每个分量代表红、绿、蓝三种基色的反射强度。比如珊瑚红色可以表示为(1.0,0.5,0.31),这意味着这个表面反射了100%的红光、50%的绿光和31%的蓝光。
理解颜色向量的关键在于认识到它描述的是物体表面对不同波长光的反射特性。白色物体(1,1,1)反射所有入射光,黑色物体(0,0,0)吸收所有光线。我在实际项目中经常遇到新手混淆颜色值和亮度值的情况——记住,颜色向量描述的是反射率,而不是发光强度。
颜色向量的乘积运算特别有趣。当两个颜色向量相乘时,实际上是在模拟光线与物体表面的交互。比如(1,0.5,0.5)的物体被(0.5,1.0,0.5)的光照射时,最终呈现的颜色是(0.5,0.5,0.25)。这个简单的乘法运算完美解释了为什么白光照在任何物体上都不会改变物体颜色——因为(1,1,1)乘以任何向量都等于原向量。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 冯氏光照模型:真实感的基石
冯氏光照模型(Phong Lighting Model)是图形学中最经典的光照模拟方法。它将复杂的光照现象分解为三个可计算的分量:环境光、漫反射和镜面反射。这种分解不仅简化了计算,还能产生相当真实的视觉效果。
环境光照(Ambient)模拟的是间接光照效果。在实际场景中,即使没有直接光源,物体也不会完全黑暗。我通常将环境光系数设为0.1左右,这个值太小会导致场景太暗,太大又会失去层次感。环境光的计算公式很简单:
code复制环境光 = 环境系数 × 光源颜色 × 物体颜色
漫反射(Diffuse)是光照效果中最显著的部分。它遵循兰伯特余弦定律:表面与光线夹角越小,看起来越亮。计算时需要用到表面法向量和光线方向的点积:
code复制漫反射 = 漫反射系数 × 光源颜色 × 物体颜色 × max(dot(N,L),0)
这里N是单位法向量,L是单位光线方向向量。我在实现时经常忘记归一化这两个向量,导致光照效果异常,这是新手常犯的错误。
镜面反射(Specular)模拟的是高光效果。冯氏模型通过计算反射向量和视线向量的夹角来确定高光强度:
code复制镜面反射 = 镜面系数 × 光源颜色 × (max(dot(R,V),0))^shininess
其中R是反射
