第五章 场 景 绘 制 与 交 互

上传人:汽*** 文档编号:465437941 上传时间:2022-12-26 格式:DOCX 页数:33 大小:303.52KB
返回 下载 相关 举报
第五章 场 景 绘 制 与 交 互_第1页
第1页 / 共33页
第五章 场 景 绘 制 与 交 互_第2页
第2页 / 共33页
第五章 场 景 绘 制 与 交 互_第3页
第3页 / 共33页
第五章 场 景 绘 制 与 交 互_第4页
第4页 / 共33页
第五章 场 景 绘 制 与 交 互_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《第五章 场 景 绘 制 与 交 互》由会员分享,可在线阅读,更多相关《第五章 场 景 绘 制 与 交 互(33页珍藏版)》请在金锄头文库上搜索。

1、第五章 场 景 绘 制 与 交 互Intra3D 2.0 体系结构中的前三层均与窗口系统无关,但是图形不能画在脑子里,交 互不能靠嘴巴来实现。第四层“绘制与交互层”必须与窗口系统相关。本 章重 点 讲 述场 景 视 窗 程 序 SceneView 与简 单 视 窗程 序 Window3D 的 设计SceneView 用于构造交互式 3D 应用软件的主界面, Window3D 用于构造 3D 对话。5.1 场景视窗 SceneView 的设计三维图形的交互式绘制是程序员面临的主要困难之一。Intra3D场景视窗程序 SceneView 封装了交互式绘制的所有细节,如消息处理、场景节点的遍历绘制、

2、多重采 样消锯齿、鼠标交互等。 SceneView 为开发者提供简洁的编程接口,可以快速创建交互 式 3D 应用程序框架。C+ 类 库 中 的 SceneView 程 序 见 Intra3D-DLLInc ludeLayer4SceneView.h 和 Intra3D-DLLLayer4SceneView.cpp 。 COM 库 中 的 程 序 见 Intra3D-COMLayer4 SceneView.h 和 SceneView.cpp 。由于 SceneView 与窗口相关,使得类库中的 SceneView 程序与 COM 库中的程序有 些差别。 COM 对象 SceneView 更确切地

3、应该称为 ActiveX 控件,它具有方法、事件和属 性。本节先分四小节论述类 SceneView 的设计,再论述 ActiveX 控件 SceneView 的设计。类 SceneView 是 Visual C+ MFC 中 CView 的派生类,其声明如下:class SceneView : public CViewpublic:SceneView(void);SceneView(void);DECLARE_DYNCREATE(SceneView)/ 用于设置场景绘制、动画的函数void SetClearColor(float red,float green,float blue,float

4、 alpha=0.0f);void GetClearColor(float *red, float *green, float *blue, float *alpha);void Set SceneRoot(SceneNode * node); SceneNode *Get SceneRoot(void);void EnableAnimate(void);void DisableAnimate(void);BOOL IsAnimateEnabled(void); void EnableAntialiasing(int jitterTimes); void DisableAntialiasing

5、(void);/ 设置背景颜色/ 获取背景颜色/ 设置当前场景的跟节点/ 获取当前的场景的跟节点/ 使场景处于动画状态/ 停止场景的动画/ 检查场景是否处于动画状态/ 启用多重采样消锯齿/ 停止多重采样消锯齿void GetAnt ialiasingInfo(BOOL *bAntialiasing, int *jitterTimes);/ 获取消锯齿的信息virtual void InitScene(void);virtual void ControlAnimat e(void);void Run(void);BOOL SaveAsBMP(char *strFile);/ 用户定义的场景初始化

6、函数/ 用户定义的动画函数,控制各节点的运动/ 执行绘制与动画/ 将当前窗口的 3D 图形保存为 BMP 图像public: / 用于交互的函数 void SelectNode(char *name);void SelectNode(SceneNode * node);void UnselectNode(void);void SetMouseInteraction(int type);int GetMouseInteraction(void);/ SceneView 标准 3Dafx_msg void OnToggleAnimate(void);afx_msg void OnMouseSele

7、ct(void);afx_msg void OnMouseTranslat eXY(void);afx_msg void OnMouseTranslat eXZ(void); afx_msg void OnMouseRot ate(void);afx_msg void OnMouseRot ateLeftRight(void); afx_msg void OnMouseRot ateUpDown(void); afx_msg void OnMouseRot ateCWCCW(void);afx_msg void OnScaleUp(void);afx_msg void OnScaleDown(

8、void);afx_msg void OnZoomIn(void);afx_msg void OnZoomOut(void);afx_msg void OnPerspective(void);afx_msg void OnOrtho(void);afx_msg void OnReset(void);/ SceneView 辅助 3D/ 拾取当前场景的某个节点/ 拾取当前场景的某个节点/ 取消已拾取的节点/ 设置鼠标交互的方式/ 获取鼠标交互的方式交互,有对应的工具条 / Enable/Disable 动画/ Select/Unselect 节点/ “左右上下”平移/ “左右前后”平移/ 绕原点

9、任意方向旋转/ 绕原点“左右”翻转/ 绕原点“上下”翻转/ 绕原点“顺逆时针”旋转/ XYZ 同比例放大,对于相机即为 OnZoomIn/ XYZ 同比例缩小,对于相机即为 OnZoomOut/ 减小相机视角,放大整个场景/ 增大相机视角,缩小整个场景/ 相机节点透视投影/ 相机节点平行投影/ 恢复初始状态交互,有对应的工具条 /P 表示 Positive , N 表示 Negative afx_msg void OnTranslat eXP(void); afx_msg void OnTranslat eXN(void); afx_msg void OnTranslat eYP(void);

10、 afx_msg void OnTranslat eYN(void);afx_msg void OnTranslat eZP(void); afx_msg void OnTranslat eZN(void); afx_msg void OnRot ateXP(void); afx_msg void OnRot ateXN(void); afx_msg void OnRot ateYP(void);afx_msg void OnRot ateYN(void); afx_msg void OnRot ateZP(void);afx_msg void OnRot ateZN(void);afx_ms

11、g void OnScaleXP(void);afx_msg void OnScaleXN(void);afx_msg void OnScaleYP(void);afx_msg void OnScaleYN(void);afx_msg void OnScaleZP(void);afx_msg void OnScaleZN(void);protected: / 窗口消息 afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);afx_msg void OnClose(void);afx_msg void OnSiz e(UINT nType, in

12、t cx, int cy);afx_msg void OnTimer(UINT nIDEvent);afx_msg void OnMouseMove(UINT nFlags, CPoint point);afx_msg void OnLButtonDown(UINT nFlags, CPoint point);afx_msg void OnLButtonUp(UINT nFlags, CPoint point); DECLARE_MESSAGE_MAP()virtual void OnDraw(CDC* pDC) Run(); / Override Cview:OnDrawprotected:

13、 / 成员变量 HGLRCm_hRC; / OpenGL的 RC HandleHDCm_hDC; / Window的 DC HandleSceneNode*m_pSceneRoot;/ 场景根节点SceneNode*m_pSelectedNode;/ 已被拾取的节点charm_strSelect edNodeName32; / 已被拾取的节点名字BOOLm_bNodeSelected;/ 是否某一节点已被拾取floatm_fClearColor4;/ 背景颜色intm_iViewportWidth;/ 窗口宽度intm_iViewportHeight ;/ 窗口高度intm_iMouseInt

14、 eraction;/ 鼠标交互的方式intm_iMouseX, m_iMouseY ;/ 鼠标的坐标BOOLm_bLeftButtonDown;/ 鼠标的左键是否按下BOOLm_bAnimat eEnabled;/ 场景是否处于动画状态intm_iAnimateDelay;/ 动画的延迟(毫秒)BOOLm_bAnt ialiasing;/ 多重采样消锯齿标志intm_iJitterTimes;/ 相机节点抖动次数;5.1.1 窗口消息处理OnMouseMove 、SceneView 的 函 数 OnCreate 、 OnClose 、 OnSize 、 OnTimer 、OnLButtonD

15、own 与 OnLButtonUp 对应如下消息映射:IMPLEMENT_DYNCREATE(SceneView, CView)BEGIN_MESSAGE_MAP(SceneView, CView)ON_WM_CREATE()ON_WM_CLOSE()ON_WM_SIZ E() ON_WM_TIMER()ON_WM_MOUSEMOVE()ON_WM_LBUTTONDOWN( )ON_WM_LBUTTONUP( )END_MESSAGE_MAP()函数 OnCreate 用于创建支持 OpenGL 像素格式的窗口。函数 OnClose 关闭 OpenGL 窗口并释放相应的资源。int SceneView:OnCreate(LPCREATESTRUCT lpCreateStruct)if (CView:OnCreate(l

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 机械/制造/汽车 > 电气技术

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号