本文已参与「新人创作礼」活动,一起开启掘金创作之路。
MeshModels
演示示例: Vessels with sea depth; Mesh models coloring, wireframe; Mesh models realtime coloring; Mesh models by code
通过MeshModels 属性列表,可以将3D模型从外部3D模型编辑器插入到LightningChart View3D中。 模型可以以OBJ格式导入,这是一种3D建模应用程序和游戏引擎中的通用格式。
注意! 由于DirectX 11不在支持Direct3D X-格式文件(.x),LightningChart v.7 v.7之后不再支持该文件格式。
图:在View3D视图中载入战舰和潜艇模型,,覆盖SurfaceGridSeries3D 可视化海底深度数据。
加载模型
• 要从文件加载模型,可在ModelFileName属性内设置路径与文件名,或者使用LoadFromFile方法。当从文件加载模型,如果纹理填充存在于相同的路径中,并且可以访问MTL文件和图像文件,那么纹理填充也会被加载。
• 从LightningChart 第8.5版本开始, MeshModel 创建支持.obj文件中的顶点颜色。顶点位置支持Red, Green, Blue 以及x、y和z后的Alpha 值(XYZRGBA).
• 从数据流(stream)加载模型,可使用LoadFromStream方法。 数据流读取方法仅读取几何形状和材质,不读取纹理。
• 从资源(resource)加载模型,可使用LoadFromResource方法。
模型的定位、缩放和旋转
MeshModel对象的Position依据其所分配到的X、Y和Z轴而定。模型可以通过编辑Rotation属性来旋转。其Size 可用Size属性来定义,这是原始模型大小的一个要素集合,不遵循轴向范围或3D世界维度。
开启填充与线框
• 要显示填充,可设置 Fill = True
• 要显示线框,可设置WireFrame = True, 并在WireFrameLineColor中设置首选线条颜色。
图:飞机显示为线框(WireFrameLineColor = Red),默认以灰色填充
自定义着色填充
默认情况下,模型采用OBJ模型的颜色进行渲染。用UpdateFillColors(int[] colors)方法,可以为模型的顶点应用自定义颜色。此方法也可以定期调用,以应用实时颜色更新。UpdateFillColors 方法需要一个与顶点位置长度(X.Length)相等的ARGB颜色数组。每个顶点一个颜色。
GeometryConstructed 事件报告顶点在轴值空间中的位置,如X、Y和Z数组。在应用着色时,例如通过其他图表对象(如数据点)的空间距离,尤其需要它们。当在初始化阶段时订阅GeometryConstructed事件处理程序,而当不在需要的时候可以取消。
图:用UpdateFillColors方法根据空间距离为MeshModel着色。
注意: ChartTools.ConvertDataToColorsByFixedIntervalPalette 方法可用来根据给定的调色板色阶来讲数据值转换为颜色 (ARGB int)。
自定义着色线框
线框可以采用自定义颜色进行着色。用GeometryConstructed 事件处理器可获得所需的颜色数组长度,并用UpdateWireframeColors方法可应用新的颜色。
Copyright Arction Ltd 2009-2021 215 图:用UpdateWireframeColors方法根据空间距离为MeshModel线框着色。
反向顶点缠绕顺序
有些模型是用反向缠绕顺序制作的,因此剔出会使它们不可见。假如一个模型不能正确显示,需将 Cull 设置在Clockwise、CounterClockwise 与None之间进行变更。
meshModel.Cull = Cull.CounterClockwise;
MeshModel 渲染顺序
在LightningChart 第8.5版本中引进了RenderingOrder -属性。该属性控制着MeshModel是否在例如PointLineSeries3D 和SurfaceGridSeries3D (BeforeSeries)等其他系列之前渲染,或是在他们(AfterSeries)之后渲染。具有类似RenderingOrder -设置的MeshModels是按照它们添加到图表中的顺序绘制的。
meshModel.RenderingOrder = MeshModelRenderingOrder.BeforeSeries;
RenderingOrder 可以影响以上所有半透明的MeshModels。其用途可确定是否可以通过模型看到其他系列。如果一个MeshModel 使用不透明颜色,都会挡住后面所有的东西,无论RenderingOrder
-设置为什么。
图:一个半透明MeshModel的RenderingOrder,左侧设置为BeforeSeries,右侧设置为AfterSeries 。 使用BeforeSeries -选项,即使模型颜色是透明的,也无法通过模型看到如PointLineSeries3D等其他系列。
注意:当前的Rectangles3D和Polygons3D不受RenderingOrder的影响,因为它们不看作是系列
从顶点以编程方式构造网格模型
从第 v.8.2版本开始, MeshModel 支持以编程方式构造MeshModel几何形状。这可以实现对通过计算产生的对象和形状可视化。
可用的Create 方法如下:
• Create(positions, colors, indices)
• Create(positions, colors, normals, indices)
• Create(positions, textureCoordinates, bitmap, textureWrapMode, indices)
• Create(positions, normals, textureCoordinates, bitmap, textureWrapMode, indices)
索引数组(indices)参数是可选的。如果提供有的话,他们将定义从给定的数组中使用哪些顶点、颜色、光法线和纹理坐标。当多个三角形共享相同的顶点时,使用索引可以节省资源。
图:通过代码构造MeshModels
旋转、缩放和定位属性等以及事件也适用于从顶点以编程方式创建的MeshModel,与所加载对象的工作方式相似。
有效地更新位图填充
当用Create方法创建了一个MeshModel后,可提供位图和纹理坐标作为参数,可以非常有效地更新位图而不用重建几何结构。调用UpdateFillBitmap 方法可以进行更新。
注意! UpdateFillBitmap方法不适用于从OBJ文件加载的模型。
用鼠标跟踪模型
用MeshModel可进行基于三角形的鼠标位置跟踪。采用MouseTriangleTraced 事件,可指示距离摄像头最近的三角形和鼠标位置。
事件参数有以下信息:
• IntersectionPointAxisValues: 三角形面在坐标轴中的交点
• ModelSpaceTriangleCoordinates: 3个三角形角(顶点)的数组,鼠标在3D模型空间坐标中点击
• WorldSpaceTriangleCoordinates: 3个三角形角(顶点)的数组,鼠标在3D世界坐标系中点击
• NearestCoordinateIndex: 追踪的三角形的最近坐标索引,值为0…2。用索引从ModelSpaceTriangleCoordinates 或WorldSpaceTriangleCoordinates数组中提取索引。
图:用鼠标跟踪MeshModels; 跟踪结果在注释框中显示。
关于LightningChart数据可视化图形控件使用篇39-3D模型空间中的·MeshModels章节就分享到这里了。
如果在实际应用中遇到技术问题或需要帮助,可以添加下方微信号联系官方技术支持。
微信号:lightningchart_china
如果您想进一步使用LightningChart数据可视化图形控件,请添加后回复“学习”可免费领取一套全功能版LightningChart数据可视化控件。
后续我会不断更新LightingChart更详细的使用方法,写文不易,还望多多回复关注支持!谢谢!
最新版V10 LightningChart下载地址:猛击下载
今天的文章LightningChart数据可视化图形控件使用篇39-3D模型空间中的·MeshModels分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/21043.html