没有合适的资源?快使用搜索试试~ 我知道了~
IntraD的层次结构IntraD采用上下级关系的层次结构.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 72 浏览量
2023-08-26
21:52:48
上传
评论
收藏 3.71MB PDF 举报
温馨提示
试读
103页
IntraD的层次结构IntraD采用上下级关系的层次结构.pdf
资源推荐
资源详情
资源评论
1.4.2 Intra3D 2.0 的层次结构
Intra3D 2.0 采用上下级关系的层次结构,它将构件库分成四层,高层构件可以引用低层
构件,但低层构件不能引用高层构件,如图 1.9 所示。
第一层为“基础对象与函数”(Basic Objects and Functions),该层构件集合记为 B。第
二层为“图形对象”(Graphical Objects),该层构件集合记为 G。
第三层为“场景图与节点”(Scene Graph and Nodes),该层的构件集合记为 S。
第四层为“绘制与交互”(Rendering and Interaction),该层的构件集合记为 R。
图 1.9 Intra3D 2.0 体系结构
1.4.4 Intra3D 2.0的主要模块与功能
一、基础对象与函数层
(1)定义了用于对象引用计数的内存管理基类;
(2)矢量、矩阵与四元组运算,鼠标跟踪球算法;
(3)点阵字体与三维矢量字体输出,常用于数据可视化图形的数据标注;
(4)图像输入输出以及纹理映射,支持 BMP、GIF、JPEG、SGI、TGA 等图像格式;
(5)常用几何图元的绘制,如锥、柱、球、环等,并支持 Swept 形体,螺旋体的绘制;
(6)提供 450余种材质,在第四层中可以交互式编辑这些材质。
二、图形对象层
图形对象能将数据转化为几何模型并可以绘制出来。Intra3D 2.0 版提供了三类图形对
象:
(1)常用几何对象,如长方体、锥体、圆柱体、球体、圆环体、Swept 形体等;
(2)多边形模型对象,用于绘制 Autodesk 公司.3ds 模型和 Wavefront 公司的.obj 模型;
(3)商业统计图形对象,如柱形图、带状图、条形图、折线图、面积图、饼图、塔形图、
曲线图、曲面图、进程图、股票图等。
图形对象的开发与应用问题密切相关,用户可以使用继承方法扩充新的图形对象,而不
会影响到其它三层的构件。
4、 绘制与交互层
1、 基础对象与函数层
3、 场景图与节点层
2、 图形对象层
Intra3D
C++
类库
Intra3D
COM
库
Window 9X/NT + OpenGL + Visual C++
三、场景图与节点层
场景图(Scene Graph)是有向无环图,Scene Graph 的主要节点有:
(1)SceneNode 是所有节点的基类。在 SceneNode 中定义了局部坐标系以及相应的图形变
换,这样便于第四层以同样的操作方式实现三维交互。
(2)相机节点(CameraNode)支持平行投影与透视投影,支持多个相机切换。
(3)光源节点有三种:平行光源节点(DirLightNode)、点光源节点(PointLightNode)和锥光源
节点(SpotLightNode)。
(4)形体节点(ShapeNode)用于引用图形对象,有关图形对象的三维交互均由 ShapeNode
处理。
四、绘制与交互层
Intra3D 2.0 的交互分两类:一类是对形体、光源和相机的直接操作,另一类是真实感属
性的编辑。Intra3D 的场景视窗构件(SceneView)封装了交互式绘制的所有细节,如消息处
理、场景节点的遍历绘制、多重采样消锯齿、鼠标交互等。为了便于编辑真实感属性,Intra3D
2.0 定制了一些常用对话:矢量字体对话(FontDialog)、颜色对话(ColorDialog)、材质库
对 话 ( MaterialLibDialog )、 材 质 对 话 ( MaterialDialog ) 与 光 源 对 话 ( DirLightDialog,
PointLightDialog, SpotLightDialog)。
Intra3D 2.0 主要模块对应的 C++类与 COM 对象列表如下:
模块(.h, .cpp) C++ 类或函数 COM 对象 功能
一、 基 础 对 象 与 函 数 层
Vector
类 VECTOR 无 矢量运算
Matrix
函数 无 矩阵运算
Rotation
类 ROTATION 无 四元组与旋转运算
Trackball
类 Trackball 无 鼠标跟踪球算法
BitmapFont
函数
BitmapFont
三种点阵字体与绘制
Text3D
类 Text3D
Text3D
矢量字体与绘制
ImageIO
函数 无 数字图像输入输出
Primitive
函数
Primitive
绘制锥、柱、球、环等形体
Material
类 Material
Material
含 400 余种材质
Texture2D
类 Texture2D
Texture2D
纹理映射
二、 图 形 对 象 层
GraphicalObject
类 GraphicalObject
GraphicalObject
图形对象的基类
Model3DS
类 Model3DS
Model3DS
Autodesk 公司的 3DS 模型
ModelOBJ
类 ModelOBJ
ModelOBJ
Wavefront 公司的 OBJ 模型
ColumnChart3D
类 ColumnChart3D
ColumnChart3D
三维柱形图
RibbonChart3D
类 RibbonChart3D
RibbonChart3D
三维带状图
LineChart2D
类 LineChart2D
LineChart2D
二维折线图
BarChart2D
类 BarChart2D
BarChart2D
二维条形图
BoxObject
类 BoxObject
BoxObject
长方体对象
ConeObject
类 ConeObject
ConeObject
锥体对象
CylinderObject
类 CylinderObject
CylinderObject
柱体对象
SphereObject
类 SphereObject
SphereObject
球体对象
TorusObject
类 TorusObject
TorusObject
圆环对象
TubeObject
类 TubeObject 无 导管状形体对象
SwaptObject
类 SwaptObject 无 Swapt 形体对象
三、 场 景 图 与 节 点 层
SceneNode
类 SceneNode
SceneNode
场景节点基类
CameraNode
类 CameraNode
CameraNode
相机节点
ShapeNode
类 ShapeNode
ShapeNode
形体节点
DirLighNode
类 DirLighNode
DirLighNode
平行光源节点
PointLightNode
类 PointLightNode
PointLightNode
点光源节点
SpotLightNode
类 SpotLightNode
SpotLightNode
锥光源节点
GroupNode
类 GroupNode
GroupNode
组节点
四、 绘 制 与 交 互 层
SceneView
类 SceneView
SceneView
场景的视窗
Window3D
类 Window3D OglWindow 简单的 OpenGL 视窗
FontDialog
类 FontDialog 无 矢量字体对话
ColorDialog
类 ColorDialog 无 颜色对话
LightDialog
类 LightDialog 无 光源对话
MaterialDialog
类 MaterialDialog 无 材质对话(含材质库)
CommonDialog
函数
CommonDialog
颜色、光源、材质等对话
第二章 基 础 对 象 与 算 法
2.1 图形变换基础运算
本节是全书唯一出现数学公式的地方。大多数程序员害怕数学公式,我也害怕。所以咱
们是同一条战线的,你就不用担心看不懂。
在图形学中,常用矩阵运算来实现图形变换。采用 4*4 的齐次矩阵就可以用统一的矩阵
相乘来表示平移、比例与旋转变换。OpenGL 提供了 glMultMatrix、glRotate、glTranslate、
glScale 等函数来实现常规的图形变换。但是矩阵难以表示图形变换的状态与过程,例如给
出前后两个矩阵,就无法判断平移量、缩放量、旋转量各是多少。可见仅使用矩阵运算并不
满足交互式 3D 图形系统的需求。
Intra3D 使用四元组(Quaternion)表示旋转变换的状态,再用两个矢量分别表示平移
变换与比例变换的状态。即总共用 10 个浮点变量就可以完全确定图形变换的状态与过程。
在交互式 3D 图形系统中,常需要用二维的输入设备模拟三维操作。鼠标跟踪球算法就
是用鼠标来实现三维旋转变换的一种方法。
本节将重点介绍四元组运算与鼠标跟踪球算法。由于矢量运算与矩阵运算是大家熟知
的,本节仅列出相应的函数。
2.1.1 矢量运算
Intra3D 2.0 C++类库中矢量运算的程序见
和和 。COM 库的程序见
和 Vector.cpp。
矢量的数据结构定义如下:
class VECTOR
{
public:
float x, y, z;
VECTOR(float x=0.0, float y=0.0, float z=1.0);
};
例如 X、Y、Z 方向的单位矢量 A、B、C 可以定义如下:
VECTOR A(1, 0, 0), B(0, 1, 0), C(0, 0, 1) ;
矢量运算的函数如表 2.1 所示。
float VectorMagnitude(VECTOR A);
功能:矢量求模
输入:A
返回:A 的模 |A|
void VectorNormalize(VECTOR *A);
功能:矢量归一化
输入:A
输出:如果 |A|=0,输出矢量仍为 A;否则输出矢量为 A/(|A|)
VECTOR operator + (VECTOR A, VECTOR B);
功能:矢量相加
输入:A, B
返回:A + B
VECTOR operator - (VECTOR A, VECTOR B);
功能:矢量相减
输入:A, B
返回:A – B
VECTOR operator * (VECTOR A, float s);
VECTOR operator * (float s, VECTOR A);
功能:矢量缩放
输入:A, s
返回:s * A
VECTOR VectorCross(VECTOR A, VECTOR B);
VECTOR operator * (VECTOR A, VECTOR B);
功能:矢量叉积
输入:A, B
返回:A 与 B 的叉积
float VectorDot(VECTOR A, VECTOR B);
float operator ^ (VECTOR A, VECTOR B);
功能:矢量点积
输入:A, B
返回:A 与 B 的点积
表 2.1 矢量运算函数
2.1.2 矩阵运算
Intra3D 2.0 C++类库中矩阵运算程序见 和和
。COM 库的程序见 和
Matrix.cpp。
矩阵运算的函数如表 2.2 所示。
void MatrixAdd(float *M, const float *A, const float *B, int i=4, int j=4);
功能:矩阵相加
剩余102页未读,继续阅读
资源评论
hhappy0123456789
- 粉丝: 61
- 资源: 5万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Pytorch-pytorch深度学习教程之深度残差网络.zip
- Pytorch-pytorch深度学习教程之循环神经网络.zip
- Pytorch-pytorch深度学习教程之逻辑回归.zip
- Pytorch-pytorch深度学习教程之双向循环网络.zip
- Pytorch-pytorch深度学习教程之卷积神经网络.zip
- Pytorch-pytorch深度学习教程之前馈神经网络.zip
- Pytorch-pytorch深度学习教程之线性回归.zip
- Pytorch-pytorch深度学习教程之基本操作.zip
- 基于QT的地图可视化桌面系统后台数据库为MySQL5.7源码.zip
- 基于simulink的PLL锁相环系统仿真【包括模型,文档,参考文献,操作步骤】
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功