Main Content

图形对象的反射特性

镜面反射和漫反射

您可以指定补片和曲面对象的反射特性,使这些对象的外观在对场景应用光照后产生一些变化。您可能需要对这些特性进行综合调整,以产生特定的结果。

另请参阅 material 命令,以了解产生某些光照效果的便捷方式。

通过设置 SpecularStrengthDiffuseStrength 属性,您可以控制对象表面上的镜面反射和漫反射量。下图说明了这两种属性不同组合设置下的显示效果。

环境光

环境光是一种无向光,均匀地照射在场景中的所有对象上。仅当坐标区内存在光源对象时,环境光才可见。有两个控制环境光的属性 - AmbientLightColor 是坐标区属性,用来设置颜色;AmbientStrength 是补片和曲面对象的属性,用来确定环境光在特定对象上的照射强度。

下图显示三种不同的环境光在各种强度下的颜色。球体是红色,并且存在一个白光源对象。

绿色 [0 1 0] 环境光不会影响场景,因为绿光中没有红光分量。而 RGB 值 [.5 0 1] 定义的颜色中由于有红光分量,因此会对球体上的光照产生影响,但其影响小于白色 [1 1 1] 环境光所产生的影响。

镜面反射指数

镜面反射光点的大小取决于补片和曲面对象的 SpecularExponent 属性值。此属性的取值范围为 1 到 500,对一般对象而言,其值范围在 5 到 20 之间。

下图显示根据三种不同的 SpecularExponent 属性值用白光照射红色球体的效果。

镜面颜色反射

镜面反射光的颜色可以在一定范围内变化,即从光源颜色与对象颜色的组合色到光源颜色本身。补片和曲面的 SpecularColorReflectance 属性控制此颜色。下图显示了白光照射下的红色球体。SpecularColorReflectance 属性的值从 0(对象与光源的颜色)到 1(光源的颜色)。

背面光照

背面光照对于区别显示对象的内外表面非常有用。下面这些柱状曲面切割图说明了背面光照的效果。

BackFaceLighting 的默认值为 reverselit。此设置会将顶点背离相机的法向量的方向反转,使光线可以照射到内曲面,再反射到相机。将 BackFaceLighting 设置为 unlit 会对法向量背离相机的面禁用光照。

在数据空间放置光源

此示例创建一个球体和一个立方体,然后用两个光源照亮它们。光源对象被放在无穷远处,但方向由它们的位置向量指定。

% Create a sphere
sphere(36);
axis([-3 3 -3 3 -3 3]) 
hold on
% Create a cube
fac = [1 2 3 4;2 6 7 3;4 3 7 8;1 5 8 4;1 2 6 5;5 6 7 8];
vert = [1 1 1;1 2 1;2 2 1;2 1 1;1 1 2;1 2 2;2 2 2;2 1 2];
patch('faces',fac,'vertices',vert,'FaceColor','y');
% Add lights
light('Position',[1 3 2]);
light('Position',[-3 -1 3]);
hold off

light 函数定义两个光源对象,它们位于无限远处,方向由 Position 向量指定。这些向量以坐标区坐标 [x, y, z] 方式定义。