Skip to content

模型显示

模型显示主要关注模型的形状、外观、位置三大要素。其中形状通过Gometry、Shape等相关类来描述,外观使用Material来描述,位置使用Matrix、Transform来描述。三大要素组成了场景节点(SceneNode):

模型显示三要素

1 基本显示图元

实时渲染引擎能够处理的基本图元(Primitive)只有点、直线、三角形三种类型。任何物体,无论复杂的还是简单的,都是这三种基本图元的组合, 其中一条线段由两个点组成,一个三角形由三个点三条边组成。

基本图元

任何的对象的显示数据在ARS中均使用BufferGeometry来表达。

2. BufferGeometry

csharp
namespace AnyCAD.Foundation
{
    public class GeometryBuilder
    {
        // 在原点位置创建一个盒子
        public static BufferGeometry CreateBox(float widthX, float widthY, float heightZ);
        // 在原点位置创建一个圆柱、圆台或者圆锥
        public static BufferGeometry CreateCylinder(float radiusTop, float radiusBottom, float height);
        // 创建一个平面
        public static BufferGeometry CreatePlane(float width, float height);
        // 在原点位置创建一个球
        public static BufferGeometry CreateSphere(float radius);
        // 创建一个任意形状
        // @param vb: 顶点位置
        // @param nb: 顶点法向(可选)
        // @param uv: 顶点纹理坐标(可选)
        // @param ib: 索引
        public static BufferGeometry CreateGeometry(Float32Buffer vb, Float32Buffer nb, Float32Buffer uv, Uint32Buffer ib);
    }
}

BufferGeometry可以是点,可以是线,也可以是三角形网格,EnumPrimitiveType用来告诉显示引擎到底该如何绘制BufferGeometry:

csharp
namespace AnyCAD.Foundation
{
    public enum EnumPrimitiveType
    {
        POINTS = 0,  // 点
        LINES = 1,   // 线段
        LINE_LOOP = 2, 
        LINE_STRIP = 3, // 连续线段
        TRIANGLES = 4, // 三角形
        TRIANGLE_STRIP = 5, 
        TRIANGLE_FAN = 6 
    }
}

示例:CAE后处理显示点云

3. 显示材质

Geometry用于描述物体的形状,Material用于描述外观材质,比如颜色、透明度、纹理等。

在ARS中,MaterialTemplate用于描述材质模板,MaterialInstance是材质的具体实例。

系统内置了多种类型的材质,后续章节将做详细介绍: Mateiarls

4. 简单显示对象

4.1 PrimitiveShape

PrimitiveShape = BufferGeometry  + MaterialInstance
csharp
namespace AnyCAD.Foundation
{
    public class PrimitiveShape
    {
        public PrimitiveShape(BufferGeometry geometry, MaterialInstance material);
        ...
    }
}

4.2. PrimitiveSceneNode

PrimitiveShape描述了物体的形状、材质,放在空间的位置由矩阵来描述,可以简单的得到下面的公式:

  PrimitiveShape + Matrix4 + ... = PrimitiveSceneNode

示例:

Graphics_GeometryDynamic 展示了获取和动态修改BufferGeometry位置信息,实现模拟水面波动的效果。

5. 复杂显示对象

5.1. CompoundShape

复杂的物体一般有多个面、多条边,CompoundShape可以把多个PrimitiveShape组合在一起,方便数据管理。

5.2. ShapeSceneNode

与PrimitiveSceneNode类似,有如下简单的关系:

 CompoundShape +  Matrix4 + ... = ShapeSceneNode

6. 拓扑显示对象

6.1. BufferShape

TopoShape是物体的拓扑和数学表达,显示的时候需要借助BufferShape把数学表达转换成显示的基本图元。 BufferShape可以理解为几何世界与显示世界的桥梁。

6.2. BrepSceneNode

与PrimitiveSceneNode类似,有如下简单的关系:

 BufferShape +  Matrix4 + ... = BrepSceneNode

TIP

BrepSceneNode上增加的矩阵不会影响TopoShape已有的矩阵。

7. 小结

本节介绍了组成SceneNode的三大要素,以及三种类型的SceneNode。在应用中需要根据需求选用适合的数据来表示模型。 整体的类UML图如下所示:

模型显示UML图


上海图无形科技有限公司旗下产品
Copyright © 2013-2024 AnyCAD