MATLAB提供了几个用于设置光源位置和材质的命令,如表3-2中所示。
表3-2 设置光源位置和材质的命令
| 命 令 | 功 能 |
|---|---|
| camlight | 相对于相机位置创建或移动Light对象 |
| lightangle | 在球坐标中创建或放置一个Light对象 |
| light | 创建一个Light对象 |
| lighting | 选择一种光照方法 |
| material | 设置对象的材质 |
1.light函数
该函数在当前坐标系中创建一个光照对象,该函数的调用格式为:
light('PorpertyName',PropertyValue,…) 创建一个光照对象,并给指定属性赋值。默认条件下,MATLAB将当前坐标系作为光照对象的父对象,除非用Parent属性指定另一个坐标系。
handle=light(…) 返回所创建的光照对象的句柄。
注意:光照对象只能用于Patch对象和Surface对象。光照对象本身是看不到的,但可以在Patch对象和Surface对象上看到光照效果。
下面的代码演示位置为无穷远,方向由[1 0 1]定义的黄色光源在peaks数据定义的曲面上的光照效果。
>> h=surf(peaks);
>> set(h,'FaceLighting','phong','FaceColor','interp', 'AmbientStrength',0.5)
>> light('Position',[1 0 1],'Style','infinite','Color','y');
生成图3-9。
图3-9 给peaks曲面添加光照
2.lightangle函数
该函数在球面坐标系中创建一个光照对象。该函数的调用格式为:
lightangle(az,el) 创建光照对象,该对象的位置用方位角和仰角确定。az为方位角,el为仰角。
light_handle=lightangle(az,el) 创建一个光照对象并将该对象的句柄返回到light_handle中。
lightangle(light_handle,az,el) 设置句柄为light_handle的光照对象的位置。
[az,el]=lightangle(light_handle) 返回light_handle指定的光照对象的方位角和仰角。
下面的动画给peaks曲面添加光照并变化光照对象的方位角。
>> surf(peaks)
>> axis vis3d
>> h=light;
>> for az=-50:50
lightangle(h,az,30)
drawnow
end
3.lighting函数
利用该函数选择光照算法,调用格式为:
lighting flat 选择刻面光照。
lighting gouraud 选择gouraud光照。
lighting phong 选择phong光照。
lighting none 取消光照。