- 8
- 0
- 约3.54万字
- 约 34页
- 2016-11-26 发布于重庆
- 举报
第五章场景绘制与交互
第五章 场 景 绘 制 与 交 互
Intra3D 2.0体系结构中的前三层均与窗口系统无关,但是图形不能画在脑子里,交互不能靠嘴巴来实现。第四层“绘制与交互层”必须与窗口系统相关。
本章重点讲述场景视窗程序SceneView与简单视窗程序Window3D的设计。SceneView用于构造交互式3D应用软件的主界面,Window3D用于构造3D对话。
场景视窗SceneView的设计
三维图形的交互式绘制是程序员面临的主要困难之一。Intra3D场景视窗程序SceneView封装了交互式绘制的所有细节,如消息处理、场景节点的遍历绘制、多重采样消锯齿、鼠标交互等。SceneView为开发者提供简洁的编程接口,可以快速创建交互式3D应用程序框架。
C++类库中的SceneView程序见Intra3D-DLL\Include\Layer4\SceneView.h和Intra3D-DLL\Layer4\SceneView.cpp。COM库中的程序见Intra3D-COM\Layer4\ SceneView.h和SceneView.cpp。
由于SceneView与窗口相关,使得类库中的SceneView程序与COM库中的程序有些差别。COM对象SceneView更确切地应该称为ActiveX控件,它具有方法、事件和属性。本节先分四小节论述类SceneView的设计,再论述ActiveX控件SceneView的设计。
类SceneView是Visual C++ MFC中CView的派生类,其声明如下:
class SceneView : public CView
{
public:
SceneView(void);
~SceneView(void);
DECLARE_DYNCREATE(SceneView)
//----------------------------------- 用于设置场景绘制、动画的函数 -------------------------------------
void SetClearColor(float red,float green,float blue,float alpha=0.0f); // 设置背景颜色
void GetClearColor(float *red, float *green, float *blue, float *alpha); // 获取背景颜色
void SetSceneRoot(SceneNode * node); // 设置当前场景的跟节点
SceneNode *GetSceneRoot(void); // 获取当前的场景的跟节点
void EnableAnimate(void); // 使场景处于动画状态
void DisableAnimate(void); // 停止场景的动画
BOOL IsAnimateEnabled(void); // 检查场景是否处于动画状态
void EnableAntialiasing(int jitterTimes); // 启用多重采样消锯齿
void DisableAntialiasing(void); // 停止多重采样消锯齿
void GetAntialiasingInfo(BOOL *bAntialiasing, int *jitterTimes); // 获取消锯齿的信息
virtual void InitScene(void); // 用户定义的场景初始化函数
virtual void ControlAnimate(void); // 用户定义的动画函数,控制各节点的运动
void Run(void); // 执行绘制与动画
BOOL SaveAsBMP(char *strFile); // 将当前窗口的 3D 图形保存为 BMP 图像
public: //------------------------------------------ 用于交互的函数 ----------------------------------------
void SelectNode(char *name); // 拾取当前场景的某个节点
void SelectNode(SceneNode * node); // 拾取当前场景的某个节点
void UnselectNode(void); // 取消已拾取的节点
void SetMouseInteraction(int type); // 设置鼠标交互的方式
int GetMouseInteraction(void); // 获
原创力文档

文档评论(0)