Matlab颜色光照曲面图函数surfl用法

4.5
(4)

今天,继续讲解Matlab中的曲面图函数问题,利用函数surfl来绘制具有基于颜色图的光照的曲面图。本文主要讲解surfl函数的常见用法、语法说明、创建具有基于颜色图的光照的曲面图

、使用光源对象创建曲面图、指定曲面图的光源方向和反射等常见方法。

Matlab颜色光照曲面图函数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颜色光照曲面图函数surfl用法

使用光源对象创建曲面图

创建三个相同大小的矩阵。然后将它们绘制为带有来自 MATLAB® 光源对象的高光的曲面。曲面使用 Z 表示高度,并同时使用 Z 和光源对象两者来定义颜色。该函数返回包含曲面对象和光照对象的数组。将它赋值给变量 sl。

[X,Y] = meshgrid(1:0.5:10,1:20);
Z = sin(X) + cos(Y);
sl = surfl(X,Y,Z,'light');

Matlab颜色光照曲面图函数surfl用法

对 sl 进行索引,以访问和修改所创建的曲面对象和光源对象的属性。可通过 sl(1) 访问曲面图,通过 sl(2) 访问光源对象。例如,通过设置光源对象的 Color 属性来更改光源颜色。

sl(2).Color = 'r';

Matlab颜色光照曲面图函数surfl用法

指定曲面图的光源方向和反射

创建三个大小相同的矩阵以绘制为一个曲面。指定光源的方向,使方位角为 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);

Matlab颜色光照曲面图函数surfl用法

在创建曲面对象之后可使用 sl 访问并修改其属性。例如,通过设置 EdgeColor 属性来隐藏边。

sl.EdgeColor = 'none';

Matlab颜色光照曲面图函数surfl用法

共计4人评分,平均4.5

到目前为止还没有投票~

很抱歉,这篇文章对您没有用!

让我们改善这篇文章!

告诉我们我们如何改善这篇文章?

文章目录

转载文章,原文出处:MathWorks官网,由古哥整理发布

如若转载,请注明出处:https://iymark.com/articles/1633.html

(2)
微信公众号
古哥的头像古哥管理团队
上一篇 2021年02月02日 20:19
下一篇 2021年02月03日 22:43

你可能感兴趣的文章

发表回复

登录后才能评论
微信小程序
微信公众号