今天,继续讲解Matlab中的曲面图函数问题,利用函数surfl来绘制具有基于颜色图的光照的曲面图。本文主要讲解surfl函数的常见用法、语法说明、创建具有基于颜色图的光照的曲面图
、使用光源对象创建曲面图、指定曲面图的光源方向和反射等常见方法。
下面,我们首先给出Matlab中关于surfl函数的帮助文档如下:
>> help surfl surfl 3-D shaded surface with lighting. surfl(...) is the same as SURF(...) except that it draws the surface with highlights from a light source. surfl(Z), surfl(X,Y,Z), surfl(Z,S), and surfl(X,Y,Z,S) are all legal. S, if specified, is the three vector S = [Sx,Sy,Sz] that specifies the direction of the light source. S can also be specified in view coordinates, S = [AZ,EL]. surfl(...,'light') produces a colored lighted surface using the LIGHT object. This produces different results than the default lighting method, surfl(...,'cdata'), which changes the color data for the surface to be the reflectance of the surface. H = surfl(...) returns a handle to a surface graphics object. The shading is based on a combination of diffuse, specular and ambient lighting models. The default value for S is 45 degrees counterclockwise from the current view direction. Use CLA, HOLD ON, VIEW(AZ,EL), surfl(...), HOLD OFF to plot the lighted surface with view direction (AZ,EL). The relative contributions due to ambient light, diffuse reflection, specular reflection, and the specular spread coefficient can be set by using five arguments surfl(X,Y,Z,S,K) where K=[ka,kd,ks,spread]. Relies on the ordering of points in the X,Y, and Z matrices to define the inside and outside of parametric surfaces. Try surfl(X',Y',Z') if you don't like the results of this function. Due to the way surface normal vectors are computed, surfl requires matrices that are at least 3-by-3.
常见用法
surfl(X,Y,Z) surfl(Z) surfl(___,'light') surfl(___,s) surfl(X,Y,Z,s,k) surfl(ax,___) s = surfl(___)
语法说明
surfl(X,Y,Z) 创建一个带光源高光的三维曲面图。该函数将矩阵 Z 中的值绘制为由 X 和 Y 定义的 x-y 平面中的网格上方的高度。该函数使用光源的默认方向和着色模型的默认光照系数。这会将曲面的颜色数据设置为曲面的反射颜色。
由于曲面法向量的计算方式的原因,surfl 需要大小至少为 3×3 的矩阵。
surfl(Z) 创建曲面,并将 Z 中元素的列索引和行索引用作 x 坐标和 y 坐标。
surfl(___,’light’) 创建一个由 MATLAB® 光源对象提供高光的曲面。这与默认的基于颜色图的光照方法产生的结果不同。将 ‘light’ 对象指定为最后一个输入参数。
surfl(___,s) 还指定光源的方向。
surfl(X,Y,Z,s,k) 还指定反射常量。
surfl(ax,___) 将图形绘制到 ax 指定的坐标区中,而不是当前坐标区中。指定坐标区作为第一个输入参数。
s = surfl(___) 将返回一个图曲面对象。如果使用 ‘light’ 选项将光源指定为光源对象,则 s 将以图形数组形式返回,其中包含图曲面对象和光源对象。在创建曲面和光源对象后,可使用 s 对其进行修改。
创建具有基于颜色图的光照的曲面图
创建三个相同大小的矩阵。然后使用基于颜色图的光照将它们绘制为一个曲面。曲面使用 Z 表示高度,并同时使用 Z 和光源两者来定义颜色。
[X,Y] = meshgrid(1:0.5:10,1:20); Z = sin(X) + cos(Y); surfl(X,Y,Z)
使用光源对象创建曲面图
创建三个相同大小的矩阵。然后将它们绘制为带有来自 MATLAB® 光源对象的高光的曲面。曲面使用 Z 表示高度,并同时使用 Z 和光源对象两者来定义颜色。该函数返回包含曲面对象和光照对象的数组。将它赋值给变量 sl。
[X,Y] = meshgrid(1:0.5:10,1:20); Z = sin(X) + cos(Y); sl = surfl(X,Y,Z,'light');
对 sl 进行索引,以访问和修改所创建的曲面对象和光源对象的属性。可通过 sl(1) 访问曲面图,通过 sl(2) 访问光源对象。例如,通过设置光源对象的 Color 属性来更改光源颜色。
sl(2).Color = 'r';
指定曲面图的光源方向和反射
创建三个大小相同的矩阵以绘制为一个曲面。指定光源的方向,使方位角为 45 度,仰角为 20 度。通过增加环境光贡献度和减少漫反射与镜面反射贡献度来提高曲面的反射值。将曲面对象赋给变量 sl。
[X,Y] = meshgrid(1:0.5:10,1:20); Z = sin(X) + cos(Y); s = [-45 20]; k = [.65 .4 .3 10];
使用光源向量和反射向量绘制数据。
sl = surfl(X,Y,Z,s,k);
在创建曲面对象之后可使用 sl 访问并修改其属性。例如,通过设置 EdgeColor 属性来隐藏边。
sl.EdgeColor = 'none';
转载文章,原文出处:MathWorks官网,由古哥整理发布
如若转载,请注明出处:https://iymark.com/articles/1633.html