模型显示
模型显示主要关注模型的形状、外观、位置三大要素。其中形状通过Gometry、Shape等相关类来描述,外观使用Material来描述,位置使用Matrix、Transform来描述。三大要素组成了场景节点(SceneNode):
1 基本显示图元
实时渲染引擎能够处理的基本图元(Primitive)只有点、直线、三角形三种类型。任何物体,无论复杂的还是简单的,都是这三种基本图元的组合, 其中一条线段由两个点组成,一个三角形由三个点三条边组成。
任何的对象的显示数据在ARS中均使用BufferGeometry来表达。
2. BufferGeometry
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:
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是材质的具体实例。
系统内置了多种类型的材质,后续章节将做详细介绍:
4. 简单显示对象
4.1 PrimitiveShape
PrimitiveShape = BufferGeometry + MaterialInstance
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图如下所示: