- 1、本文档共28页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
杭州电子科技大学《实时三维图形绘制》OpenGL大作业实验报告解析
实时三维图形绘制实验报告基于粒子系统的雪花场景模拟实验目的通过一学期对《实时三维图形绘制》的学习,在熟练掌握OpenGL理论的前提下,动手实践,将课本知识转化为实际应用。实验要求编程实现绘制OpenGL场景并可交互式操作,体现课堂所学内容。实验内容1、搭建OpenGL程序框架首先在VS2015中新建项目,在该项目中建立3个主要的类:GLWindow、Keys和GLApplication,其中GLWindow类负责窗口属性的设置,包括建立、更新、删除窗口等操作。Keys类负责读取键盘的输入,这样才能实现交互的要求。GLApplication类负责建立我们的应用程序,包括初始化、更新、绘制图形等操作。窗口类GLWindow的设计在新建项目中添加类GLWindow,它包括程序主窗口的属性,以及建立、改变和删除窗口的方法(具体程序见代码)。/** windows窗口类 */classGLWindow{public:/** 构造函数 */GLWindow();/** 创建windows窗口 */boolCreate(constchar * window_title, constchar * class_name, bool fullscreen,HINSTANCE h_instance, LPVOID lpParam);/** 删除OpenGL窗口 */voidDestroy();/** 改变窗口的显示设置 */boolChangeScreenSetting();/** 当窗口大小改变时,通知OpenGL调整大小 */voidReshapeGL();/** Swap Buffers (Double Buffering) */voidSwapBuffers() { ::SwapBuffers(m_hDC); }/** 设置窗口左上角的位置 */voidSetPosX(int x);voidSetPosX(unsignedshortx) { SetPosX((signedshort)x); }voidSetPosY(int y);voidSetPosY(unsignedshorty) { SetPosY((signedshort)y); }/** 返回窗口的大小 */intGetWidth();intGetHeight();/** 设置窗口的大小 */voidSetWidth(int width);voidSetHeight(int height);/** 返回窗口左上角的位置 */intGetPosX();intGetPosY();/** 设置窗口的颜色位深 */voidSetHiColor(){ m_BitsPerPixel = 16; }voidSetTrueColor(){ m_BitsPerPixel = 32; }/** 重载运算符,可以让GL_Window m_Window声明后的m_Window作为窗口句柄使用 */operatorHWND() { return m_hWnd; }private:HWNDm_hWnd;/** 窗口句柄 */HDCm_hDC;/** 设备描述表 */HGLRCm_hRC;/** OpenGL渲染描述表 */intm_WindowPosX;/** 窗口的左上角的X位置 */intm_WindowPosY;/** 窗口的左上角的Y位置 */intm_WindowWidth;/** 窗口的宽度 */intm_WindowHeight;/** 窗口的高度 */intm_ScreenWidth;/** 全屏的宽度 */intm_ScreenHeight;/** 全屏的高度 */intm_BitsPerPixel;/** 颜色位深 */boolm_IsFullScreen;/** 是否全屏 */};键盘类Keys的设计定义键盘类Keys对我们的按键信息进行记录,用于程序达到交互的目的。/** 定义键盘类 */classKeys{public:/** 构造函数 */Keys() { Clear(); }/** 清空所有的按键信息 */void Clear() { ZeroMemory(m_KeyDown, sizeof(m_KeyDown)); }/** 判断某个键是否按下 */bool IsPressed(unsignedintkey){ return (key MAX_KEYS) ? (m_KeyDown[key] == true) : false; }/** 设置某个键被按下 */void SetPressed(unsignedintkey){ if (key MAX_KEYS) m_KeyDown[key] = true; }/** 设置某个键被释放 */void SetReleased(uns
文档评论(0)