MATLAB中的光照处理

您所在的位置:网站首页 matlab绘制圆柱体轮廓曲线 MATLAB中的光照处理

MATLAB中的光照处理

2023-11-18 01:45| 来源: 网络整理| 查看: 265

在用MATLAB绘制三维图形时,不仅可以画出带光照模式的曲面,还能在绘图时指定光线的来源。

1.带光照模式的三维曲面

surfl命令用来画一个带光照模式的三维曲面图,该命令显示一个带阴影的曲面,结合了周围的、散射的和镜面反射的光照模式。想获得较平滑的颜色过渡,则需要使用有线性强度变化的色图(如gray、copper、bone、pink等)。

surfl命令的使用格式如下:

调用格式                                           说明

surfl(Z)                                       以向量Z的元素生成一个三维的带阴影的曲面。其中阴影模式中的默认光源方位为从当前视角开始,逆时针转45°

surfl(X,Y,Z) 以矩阵X、Y、Z生成的一个三维的带阴影的曲面。其中阴影模式中默认光源方位为从当前视角开始,逆时针转45°

surfl(...,'light') 用一个MATLAB光照对象(light object)生成一个带颜色、带光照的曲面,这与用默认光照模式产生的效果不同

surfl(...,'cdata') 改变曲面颜色数据(color data),使曲面成为可反光的曲面

surfl(...,s) 指定光源与曲面之间的方位s,其中s为一个二维向量[azimuth,elevation],或者三维向量[sx,sy,sz]。默认光源方位

为从当前视角开始,逆时针转45

surfl(X,Y,Z,s,k) 指定反射常系数k,其中k为一个定义环境光(ambient light)系数(0≤ka≤1)、漫反射(diffuse reflection)系数(0≤kd≤1)、

镜面反射(specular reflection)系数(0≤ks≤1)与镜面反射亮度(以像素为单位)的四维向量[ka,kd,ks,shine],默认值为

k = [0.55 0.6 0.4 10]

h = surfl(...) 返回一个曲面图形句柄向量h

对于这个命令的使用格式需要说明的一点是,参数X、Y、Z确定的点定义了参数曲面的“里面”和“外面”,若用户想让曲面的“里面”有光照模式,只要

使用surfl(X',Y',Z')命令即可。

例:绘出山峰函数在有光照情况下的三维图形。

>> close all >> [X,Y] = meshgrid(-5:0.25:5); >> Z = peaks(X,Y); >> subplot(1,2,1) >> surfl(X,Y,Z) >> title('外面有光照') >> subplot(1,2,2) >> surfl(X',Y',Z') >> title('里面有光照')

2.光源位置及照明模式

在绘制带光照的三维图像时,可以利用light命令与lightangle命令来确定光源位置,其中light命令使用格式非常简单,即为:

light('color', s1, 'style', s2, 'position', s3)

其中color、style与position的位置可以互换,s1,s2,s3为相应的可选值。例如light('position',[1 0 0])表示光源从无穷远处沿x轴向原点照射过来。

lightangle命令的使用格式如下:

调用格式 说明

lightangle(az,el) 在由方位角和仰角确定的位置放置光源

light_handle= lightangle(az,el) 创建一个光源位置并在light_handle中返回light的句柄

lightangle(light_handle,az,el) 设置由light_handle确定的光源位置

[az,el] = lightangle(light_handle) 返回由light_handle确定的光源位置的方位角和仰角

在确定了光源位置后,用户可能还会用到一些照明模式,这一点可以利用lighting命令来实现,它主要有4种使用格式,也即有4种照明模式。

lighting flat                             produces uniform lighting across each of the faces of the object. Select this method to view faceted objects.

lighting gouraud                   calculates the vertex normals and interpolates linearly across the faces. Select this method to view curved surfaces.

lighting phong                       interpolates the vertex normals across each face and calculates the reflectance at each pixel. Select this choice to view 

                                                 curved surfaces. Phong lighting generally produces better results than Gouraud lighting, but it takes longer to render.

lighting none                         turns off lighting.

例:研读下面的程序并观察其输出图形,揣摩下面各个命令的作用。

>> close all >> [x,y,z] = sphere(40); >> colormap(jet) >> subplot(1,2,1); >> surf(x,y,z),shading interp >> light('position',[2,-2,2],'style','local') >> lighting phong >> title('phong') >> subplot(1,2,2) >> surf(x,y,z,-z),shading flat >> lighting flat >> light('position',[-1,0.5,1],'style','local','color','w') >> title('flat') >>



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3