Coin3D三维可视化教程3
命名约定
在Inventor中基本数据类型的名字都是以字母Sb开始的,例如:
- SbColor
- SbViewVolume
除了上面的基本数据以外,在Inventor中所有其他的类都是以字母So作为前缀(场景对象)。例如:
- SoCone
- SoPerspectiveCamera
- SoMaterial
- SoTransform
方法和变量使用小写字母作为开头字母。在类、方法、变量的名字中,每个单词都以大写字母开头。例如:
- getNormal()
- setSceneGraph()
- myCube
枚举类型数值都是用大写字母表示的。例如:
- FILLED
- PER_PART
场景基本类型(Scene Basic Types)
本节将讨论Inventor的Sb 基本数据类型。这些数据类型被很多的Inventor对象所使用。Inventor为不同类型的数据转换以及执行特定的 3D操作提供了很多方便实用的方法。
Inventor 定义了下列类型:
SbBool 布尔值 (TRUE or FALSE)
SbBox nx 2D 矩形或者 3D 的立方体数据。这些数据所表示的各个侧面都是平行于主轴的。可以通过设置对角线上的两点坐标来指定它们(包括SbBox3f, SbBox2f, SbBox2s);n 表示的是内部数值的个数(2 或 3个),x 表示的是内部数值的类型(f 表示浮点类型,s 表示短整形)
SbColor RGB (红/绿/蓝) 颜色值。这个类有转换函数可以将颜色值转换到其它的颜色空间中( 例如,YUV 颜色空间(色调,饱和度,亮度)。译者注 )
SbCylinder 圆柱类
SbLine 有向 3D 直线类
SbMatrix 4×4 矩阵类
SbName 字符串类。这些类被保存在一个特殊的表中( hash 哈希表。译者注 ) ,可以快速方便的进行查找。通常用于标识对象 。
SbPList 通用指针( void *)列表类。
SbPlane 3D 平面类
SbRotation 代表一个绕任意轴进行旋转的 3D 旋转类
SbSphere 球类
SbString “灵巧”的字符串类,对处理字符串提供了许多方便的方法。
SbTime 表示秒,毫秒的时间类;也可以使用 timeval 结构类型来表示
SbVec nx 2D 或 3D 向量类。用于表示点或者方向(包括 SbVec2f, SbVec3f,SbVec2s); n 是在这个类中的数据个数(2, 3, or 4 个), x 是数据类型 f 表示浮点类型,s 表示短整形)
SbViewportRegion 代表在显示窗口中的视口区域
SbViewVolume 视见体裁剪( view volume)类。( 或称“可视体积”。当使用平行投影时,view volume 就是一个长方体,当
使用透視投影时,它就是一个近大远小的截锥方体,Inventor 使用这个类来判场景中的物体是否是处于长方体或者截锥方体的范围内,如果物体已不在视见体范围之内,Inventor 就不会渲染这个物体,以提高渲染效率。具体说明可翻阅本书第四章“照相机和灯光”。译者注 )
类方法
每种Sb 类都带有一些与其相关的实用操作。例如,可以对SbVec3f类型的变量进行取反、乘矩阵、单位化等操作。下面的代码将定义一个基于特定方向和单位长度的向量。
SbVec3f v(1.0, 2.0, 3.0); // declares and initializes the vector
v.normalize(); // normalizes the vector to unit length
类似的,SbMatrix 类也包含有一些实用的方法,例如,multVecMatrix() 这个方法将当前矩阵与一个行向量相乘,并返回计算结果。rotate() 方法可以按照给定的旋转量数据设置矩阵。Open Inventor C++ Reference Manual 书中对每个Sb类的可用方法都有完整的描述。
类型 VS 域
第三章“节点和组”有关于域(fields)的完整讨论。域是节点用来存储参数的内存结构。每个域都带有一个特定类型的变量。域通常是包含在Inventor的节点中。许多域都带有一个相对应的Sb 类型的变量。例如
- SoSFVec3f 域带有一个 SbVec3f 类型的变量
- SoSFRotation 域带有一个 SbRotation 类型的变量
- SoSFName 域带有一个 SbName 类型的变量
Inventor 使用的坐标系统
Inventor 对 3D 数据使用的是右手坐标系,从屏幕内指向外,表示 z 轴的正方向。所有的角度单位都是弧度。对象都是在自己的局部坐标系空间下进行描述的,既众所周知的“对象坐标系空间”(object coordinate space)。当场景中的所有物体都已经进行完坐标变换后,那么它们就都在“世界坐标系空间”下描述了(world coordinate space)。照相机和灯光节点处于世界坐标系空间下。
包含文件(Include Files)
Inventor为每个类都提供相应的包含头文件。在程序中使用Inventor类之前都需要首先包含相应的头文件。例如,SoSphere and SoTransform 这两个节点类需要包含 SoSphere.h 和SoTransform.h 两个头文件。绝大多数的Include头文件都位于一个子目录中-例如nodes/SoSphere.h 和 sensors/SoNodeSensor.h 。
另外,如需要使用 Inventor 组件库来编写交互式应用程序的话,还需要包含 SoQt.h, SoMin或SoXt.h头文件。