此示例说明了Simulink®3D动画™MATLAB®接口的使用来创建2万博1manbetxD离线动画文件。
通过设置适当的VRWORLD和VRFIGURE对象属性来控制离线动画录制机制。创新动画的推荐方式是使用Simulink 3D动画查看器GUI。万博1manbetx还可以直接控制录制。
在此示例中,我们使用VRHeat示例中使用的热分布数据来创建动画文件,该动画文件可以很容易地分布并独立地由其他人分发。对于这种可视化,如果VRML IndexedFaceSet表示的静态几何是基于某些物理现象的模拟,它适合创建2D - AVI动画文件。
您可以使用几种方法来记录动画。在这种情况下,我们使用计划的录制。当计划记录处于活动状态时,将时间帧记录到动画文件中,每个设置虚拟世界时间属性。当您在预定义的录制间隔的结束或外部设置场景时间时,录制完成。
当使用Simulink 3D动万博1manbetx画MATLAB接口时,用户可以将场景时间设置为所需的时间,通常是从模拟现象等距的角度来看。与录制与Simulink®模型相关联的虚拟世界的动画相比,这是最重要的差异,其中场景时间直接对应于Simulink时间。万博1manbetx
请注意,场景时间可以表示任何独立数量,您希望为计算的解决方案设置动画。
加载(“vrheat.mat”);
L形块的几何形状存储在“Lblock”结构中。为了可视化目的,块被细分为三角形面。曲面面顶点坐标存储在“Lblock.mesh.p”字段中,并且三角形边缘被索引描述为顶点阵列。
vert = lblock.mesh.p';
VRML中的一组方面被定义为顶点索引的单个向量,其中小平面由-1分隔,因此我们需要适当地转换顶点阵列。VRML中的索引是基于零的,所以从最初存储在基于1的索引数组'Lblock.mesh.e'中的所有索引值中扣除了1。
:面= lblock.mesh.e (1:3) 1;方面(4)= 1;f =方面;f = f (:);面=方面';
现在我们将准备代表各种温度水平的Colormap。MATLAB内置的'JET'COLORMAP专为这些目的而设计。
CMAP = JET(192);
'lblock.sol.u'字段包含一个矩阵,其描述随时间通过的顶点的温度。我们有41个预生阶段(1是初始)262顶点。我们需要缩放温度值,使它们映射到Colormap中。
u = lblock.sol.u;UColor =(U-Repmat(min(u),大小(u,1),1))。*(尺寸(cmap,1)-1);Urange = Max(U) - min(u);Urange(Urange == 0)= 1;ucolor = round(ucolor./repmat(Urange,size(u,1),1));
我们将计算第一个动画框架,以便我们有一些开始的东西。
uslice = ucolor(:,1);Colind = Zeros(尺寸(刻面));COLIND(:,1:3)= uLICE(刻面(:,1:3)+1);colind(:,4)= - 1;ci = colind';ci = ci(:);
数据准备好了,所以我们可以加载世界。
世界= vrworld('vrheat.x3d');开放(世界);
现在我们要准备l型块。我们已经加载的VRML世界包含了一个基本的三次形式,我们可以通过设置它的“点”和“坐标”字段来重塑它,这两个字段表示顶点坐标和顶点数组的索引。我们还将通过设置'color'和'colorIndex'字段来设置颜色。
我们首先设置颜色,颜色指数,顶点,然后是顶点索引。该命令不是强制性的,但通常是更好的,因为这种方式我们确信没有比颜色更多的顶点,或者更多的索引,而不是值,这将导致一些顶点具有未定义的颜色或指数引用不列出的索引(又是值。
world.ifs_colormap.color = cmap;world.fs.colorIndex = CI;world.ifs_coords.point = Vert;world.fs.coordIndex = F;
文本评论也可以设置为熟悉的东西。
world.text.string = {'time = 0'};
打开虚拟现实查看器
无花果= vrfigure(世界);
我们将句柄掌握到虚拟世界和中的内部查看器图对象,该对象保存在变量“世界”和“图”中。现在我们设置与录制相关的虚拟世界和图形属性。我们希望在与预计的热分配时间对应的场景时间间隔(0,4)期间将计划的2D录制到文件vrheat_anim.avi中。
套(世界,'RecordInterval',[0 4]);套(图,'Record2dfilename'那'vrheat_anim.avi');套(图,'唱片2d'那'在');套(图,'Record2DCruckSquality', 100);套(图,'navpanel'那'没有任何');Vrdrawnow;%设置“RecordMode”属性受到Try-Catch保护的属性,因为此触发器在演示版本中不允许的%录制机制。尝试套(世界,'RecordMode'那'计划');set_ok = true;抓住我set_ok = false;DISP('设置“RecordMode”属性失败。);DISP(“最可能的原因是您在Simulink 3D动画演示版中运行”万博1manbetx);DISP(“这并不允许动画录制。动画文件不会被创建。');结尾
现在我们可以启动动画,你可以在观看者中观看它。请撰写MATLAB命令窗口和SIMULINK 3D动画查看器图形,以便它们都完全可见,并将图形大小调整为所产万博1manbetx生的2D动画文件的所需分辨率。使用VideoRiter对象在查看器图中将其录制为您在查看器图中录制2D动画。
当计划记录处于活动状态时,将时间框架记录到设置虚拟世界的“时间”属性的动画文件中。用户可以将场景时间设置为所需的时间,通常是从模拟现象等距离的角度来看。请注意,场景时间可以表示任何独立数量,您希望为计算的解决方案设置动画。
为了i = 1:尺寸(U,2)暂停(0.01);uslice = ucolor(:,i);Colind = Zeros(尺寸(刻面));COLIND(:,1:3)= uLICE(刻面(:,1:3)+1);colind(:,4)= -1;ci = colind';ci = ci(:);world.fs.colorIndex = CI;world.text.string = {sprintf('time =%g',lblock.sol.tlist(i))};套(世界,'时间',lblock.sol.tlist(i));Vrdrawnow;结尾
随着动画停止,文件vrheat_anim.avi是在工作目录中创建的。现在我们可以关闭并删除虚拟世界。
现在,在工作目录中创建了2D离线动画文件。如果您的系统有AVI播放器,则可以使用它来重放动画文件。
如果set_ok disp(“文件vrheat_anim.avi是在您的工作目录中创建的。”);DISP(“你可以使用AVI播放器播放此文件。);结尾
文件vrheat_anim.avi是在工作目录中创建的。您可以使用AVI播放器播放此文件。
完成VRWorld对象后,必须关闭并删除它。这是通过使用关闭和删除命令完成的。
关闭(世界);删除(世界);
但是,我们不会在这里这样做。相反,我们离开世界开放,以便您可以进一步玩。我们只会清除使用过的全局变量。
清除ANS.CI.厘米CMAP.柯林F面部一世lblock.NH.set_ok.;清除你ucolor.urangeUSLICE.V.vert.;