- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
浮动窗体中的OpenGL多视图的实现
浮动窗体中的OpenGL多视图的实现
2005-12-07 17:28作者:胡卓玮出处:VCKBASE责任编辑:方舟
由于在工作中需要结合浮动窗体实现OpenGL的多视图,用于得到三维实体的三视图观察效果,通过参考其它资料,设计了一个程序框架,在此基础之上大家可以根据自己的需要进行扩充,实现需要的功能。 程序实现效果图
关键技术实现介绍: 一、OpenGL多视图的实现 平常我们的程序大部分都是建立一OpenGL设备上下文,但在本程序中,由于要实现三维实体的多视图观察功能,因此,需要建立多OpenGL设备上下文,并在需要的时候进行切换。 同一般的OpenGL程序一样,我们在每个视图类中都定义了每个视图所对应的设备描述上下文并在视图创建的时候建立了这个设备描述上下文。
//add in the header file of view classpublic:CClientDC* m_pDC;HGLRC m_hRC;//add in the init() function of view classm_hRC = wglCreateContext(m_pDC-GetSafeHdc()); 接着在某个视图需要更新的时候(一般在每个视图的OnDraw()函数中),将这个视图的设备上下文设为OpenGL当前的渲染上下文(OpenGL Rendering context)
//add in the OnDraw() function of view class//set current devicewglMakeCurrent(m_pDC-GetSafeHdc(), m_hRC); 二、视图类型的切换及当前视图类型的判断 由于同一视图在不同的时刻根据用户的需要可能有不同的功能,因此需要在几个视图之间进行功能的切换。本程序选取一个视图作为主视图,而另外两个视图作为子视图。视图的类有一下几种:上、下视图,前、后视图,左、右视图。为此设计了枚举类型变量用于指示视图的类型。为了保证不同视图类型之间的有效切换,即不会产生重复的类型,设计了一个类用于操作视图之间的类型切换。 为了减小程序编制的负担,所有子视图共享一个视图类,而每个视图的当前类型是存储在这个视图类之外的,因此在每个视图绘制的时候都需要判断自己的类型。这样便出现了无法在子视图类中判断自己当前的视图类型的情况。为此在子视图类中增加了一个成员变量用于记录自己的类型。
//add in the header file of child view class//view ID, it will be assigned by parentframe when this program begin//[childviewA id = 1; childviewB id = 2]int m_ViewID 然后在程序运行之初,浮动窗体创建之后,对每个浮动窗体所包含的子视图的类型进行设置。
//add in the OnCreate() function of CMainFrame classAssignViewID();//the definition of AssignViewID()void CMainFrame::AssignViewID(){ CEdit3DMDoc* pdoc = (CEdit3DMDoc*)m_pMainView-GetDocument(); if(pdoc) { POSITION pos = pdoc-GetFirstViewPosition(); CView* pview; int tempid = 1; while (pos != NULL) { pview = pdoc-GetNextView(pos); if (pview-IsKindOf(RUNTIME_CLASS(CChildOGLView))) { CChildOGLView* pchildview = (CChildOGLView*)pview; pchildview-m_ViewID = tempid; tempid += 1; } } }} 我们看到这里需要从文档类中检索出所有子视图(CChildOGLView),因此,在子视图创建的时候需要把自己加入到文档中。
//add in the OnCreate() function of child view classAddMetoDoc();//the definition of AddMetoDoc()void CChildOGLView::AddM
您可能关注的文档
- 汇报材料2013.8.2.doc
- 汉语歧义句的加工.pdf
- 江苏省南京市江宁区2016年中考一模物理试题(暂无答案).pdf
- 江苏省常州市2015年中考化学真题试题(含解析).doc
- 江苏省淮安中学2009届高三化学第一次双周练1.doc
- 江苏省职称论文发表-铸件射线检测特点论文选题题目.docx
- 江苏省黄桥中学2010届高二学业水平测试模拟试题(化学)2.doc
- 江西省新余一中2013届高三物理第一次模拟考试试题新人教版.doc
- 汽油罐基础施工.docx
- 汶川地震区航空影像地质灾害自动识别技术.pdf
- 2025四川省文物局所属事业单位选调4人笔试参考题库附答案解析.docx
- 2025年重庆医科大学附属永川医院住院医师规范化培训招收89人笔试参考题库附答案解析.docx
- 2025年周口师范学院辅导员招聘考试笔试参考题库附答案解析.docx
- 2025绍兴诸暨市专职青少年事务社工招聘1人笔试参考题库附答案解析.docx
- 2025四川内江市市中区人力资源和社会保障局内江市市中区教育和体育局考核招聘教师13人笔试模拟试题及答案解析.docx
- 2025四川省交通运输厅所属事业单位选调13人笔试参考题库附答案解析.docx
- 2025山东威海市乳山鑫蜜客人力资源有限公司招聘基层卫生技术人员35人笔试参考题库附答案解析.docx
- 2025年郑州师范学院辅导员招聘考试笔试参考题库附答案解析.docx
- 2025天津市卫生健康委员会所属天津市第一中心医院第二批次招聘笔试参考题库附答案解析.docx
- 2025天津华夏未来招聘笔试参考题库附答案解析.docx
文档评论(0)