三维图片控件用于显示图形化表示的三维对象。三维场景是一个或一组三维对象,可在三维图片控件或一个单独的场景窗口中查看。设计三维场景时,可生成多个三维对象并指定对象的方向外观及其与场景中其他对象间的关系。也可设置三维场景的特性,如光源的类型及位置、用户控制的视角与场景间的交互等。

下图显示的是一个包含了一个简单三维场景的三维图片控件。

创建三维对象

出现在三维场景中的对象是现实对象的图形化表示。三维对象是三维空间中的一个顶点集,各顶点间可能相互连接,也可能相互不连接。创建三维场景时,需创建一个或一个以上的三维对象以组成三维场景。使用创建对象VI可创建三维对象。

三维对象创建完毕后,必须定义该对象在三维场景中的外观。可为三维对象设置如下可绘制属性:

  • 几何 - 指定了三维对象形状的几何体。创建框创建球面几何VI定义了简单的几何对象。也可使用网格创建更为复杂的三维对象。
  • 文本 - 如未给对象定义其几何,可为对象使用文本,从而创建一个文本对象。与具有几何形状的对象一样,文本对象也出现在三维场景中。使用创建文本VI可新建一个文本,并配置文本的颜色和字体等属性。还可使用场景文本属性和场景文本方法配置文本的特性。

LabVIEW通常以默认的大小和颜色绘制新对象并将其显示在三维场景的中心。但也可通过变换纹理来改变三维场景中三维对象的大小、方向、位置或表面外观。也可使用场景对象属性和场景对象方法配置一个三维对象。

注: 文本对象无法应用纹理

应用变换

变换指根据某种数学规则改变三维对象的方向或外观。使用变换VI可改变三维场景中对象的大小、方向和位置。三维对象的常用变换包括下列三种:

  • 平移 - 将三维对象平移到三维场景中的一个新位置。如需指定三维对象的新位置,则定义一个在对象平移方向上的向量。
  • 旋转 - 旋转三维对象以改变其方向。如需指定三维对象的新方向,则定义对象旋转的轴及旋转的角度。
  • 缩放 - 缩放三维对象以改变其大小。如需指定三维对象新的缩放比例,则设置三维场景的xyz平面的比例因子,三维场景对象将根据该比例因子改变大小。
注:要避免三维对象显示畸变,不要在剪裁平面之外缩放对象。离视角最近的近剪裁平面的默认值为0。离视角最远的远剪裁平面的默认值为10000。可使用投影:透视方法,通过编程设置剪裁平面的值。

变换包括绝对变换,即三维对象从其原始位置开始变换;或是相对变换,即三维对象从其当前位置开始变换。例如,设置平移VI用于绝对地平移一个三维对象。平移对象VI则用于相对地平移一个三维对象。

关于三维对象变形的范例,见labview\examples\Graphics and Sound\3D Picture Control目录下的Order of Transformations VI。

应用纹理

在三维对象外覆盖一个二维图像可改变三维对象表面的外观。这个过程称为添加纹理。例如,为一个球体添加一个星球表面的二维图像,该球体便拥有了星球的外观。星球表面的图像即是纹理。使用特殊:纹理属性启用三维对象纹理。接着,使用纹理VI创建一个新纹理。使用场景纹理属性和场景纹理方法来配置纹理。

关于三维对象应用纹理的范例,见labview\examples\Graphics and Sound\3D Picture Control目录下的3D Model of Solar System VI。

创建三维对象之间的关系

创建三维场景中对象之间的关系。对象可以作为父对象,也可作为子对象。对父对象所作修改将在子对象上得以反映。对象关系的使用将提高大型三维场景程序的效率,也适用于涉及到对象间具有相对运动的三维场景。例如,太阳系中,改变地球的旋转速度将影响到月球的旋转速度。如将月球作为地球的子对象,则无需为二者都配置相关变换所需的修改。

关于三维对象应用纹理的范例,见labview\examples\Graphics and Sound\3D Picture Control目录下的3D Model of Solar System VI。

配置光源

LabVIEW中,一个可见的三维场景可以带有光源也可不带有光源。通过配置光源可在三维场景中取得日光或聚光灯的视觉效果。三维场景中可创建三种光源:方向光、位置光和聚光灯。使用新光源VI可创建一个新的光源。也可使用场景光属性配置光源的其他方面,如颜色、衰减、强度等。

方向光

方向光用于创建一个距离三维场景中对象无限远的光源,取得类似日光的效果。由于方向光的位置在无限远的地方,故只可定义一个光的方向。使用方向属性可配置光的方向。

位置光

如需配置一个特定位置或原点的光源,可使用位置光。对于位置光,可就光源的位置以及光的方向指定其xyz坐标。指定光位置的xyz坐标是相对于场景中该光的从属对象的坐标,0, 0, 0表示从属对象的位置。例如,如需光源位于三维对象的正下方,可将光源设在三维对象下方1个对象坐标的位置,即坐标0, -1, 0。假设光的方向正朝着第一个对象,则另一个坐标为0, -3, 0的三维对象便出现在位置光的下方,同时光不影响第二个对象。

如需为三维场景添加位置光,可将对象的引用句柄和光的引用句柄连线至光源:添加光方法,从而为三维场景中的对象添加光。于是该对象便具有光。方向属性用于配置光的方向,位置属性用于配置光的位置。

聚光灯

聚光灯可同时指定光的方向和位置。聚光灯是具有预定议方向和角度的位置光。将光设置为位置光,但使用截止属性可定义聚光灯的角度。连线到该属性的值相当于实际聚光灯角度的一半。例如,假如希望聚光灯发射角度为40度的光线,可将该属性设置为20。该属性可取0到90之间的值,或取180(180代表不对光线采取截止)。

关于配置光源的范例,见labview\examples\Graphics and Sound\3D Picture Control目录下的Using Meshes VI。

查看三维场景

配置一个用户控制的视角与三维场景进行交互,配置一个独立场景窗口以显示三维场景,或配置一个三维场景以不断刷新和显示实时数据。

配置场景视角

右键单击三维图片控件并从快捷菜单中选择视角控制器可指定视角与三维场景进行交互。操作工具代表在三维场景中移动的视角。也可使用场景图显示场景图显示属性通过变成配置场景视角。

配置场景窗口

配置一个独立的场景窗口以在VI运行时显示三维场景。使用设置窗口VI可配置一个新的场景窗口。也可使用场景窗口属性和场景窗口方法来配置窗口的特性,如三维场景的投影、场景窗口的大小和活动状态。

实时数据

通过配置,三维场景可连续刷新以显示实时或连续变化的三维数据。将三维场景置于循环中,使用下列方法之一:

  • (建议)在循环内的三维图片引用上使用重新绘制方法,重新绘制三维场景。
  • 在要刷新场景的位置放置三维图片控件接线端或相关的局部变量。

关于配置场景摄像头和场景窗口的范例,见labview\examples\Graphics and Sound\3D Picture Control目录下的3D Model of Solar System VI。

在三维模型上显示数据

通过自由传感器和NI-DAQmx通道,可将现实世界的数据映射到三维模型上。使用传感器映射Express VI,连接一个数值数组。该数值数组表示在配置传感器对话框中配置的传感器。例如,如有一个包含两个通道的NI-DAQmx任务,并在三维模型上放置了两个自由传感器。LabVIEW将数值输入作为daqsensor1daqsensor2freesensor1freesensor2。将至少一条NI-DAQmx通道放置在三维模型上时,LabVIEW将为NI-DAQmx任务中的每条通道分配空间。关于NI-DAQmx通道的更多信息,见NI-DAQmx帮助

注:可使用DAQ助手Express VI创建NI-DAQmx任务。但是,传感器映射Express VI不能从DAQ助手Express VI处获得通道。可将数据连接至传感器映射Express VI的传感器值输入端。右键单击三维模型,放置传感器,将通道映射至三维模型。

将三维图片空间连接至Express VI的场景引用输出。连接至Express VI的数据将出现在三维模型上。根据传感器表示的数据值,放置在三维模型上的传感器将影响三维模型传感器点的颜色。