基于opengl的3d游戏的设计与实现内容摘要:
设备描述表 (DC)说明了笔和画刷的颜色绘制模式,调色盘信息,映射模式,以及其他 Windows 必须知道的怎样显示图形的属性。 与其他的 Windows 应用程序一样, OpenGL 应用程序也必须应用DC。 不过我们将其称为着色描述表( Rendering Context, RC),由它通知 Windows在窗口中绘制图形。 每一个 OpenGL都被连接到一个 RC上。 RC将所有的 OpenGL调用命令 连接到 DC上,应用程序必须在绘图之前调用专用函数 wglCreateContext()创建自己的 RC,调用 wglMakeCurrent 使其当前化,退出 OpenGL 时使 RC 非当前化。 及 主要要完成窗口的设置: int m_WindowPosX。 /** 窗口的左上角的 X位置 */ int m_WindowPosY。 /** 窗口的左上角的 Y位置 */ int m_WindowWidth。 /** 窗口 的宽度 */ int m_WindowHeight。 /** 窗口的高度 */ int m_ScreenWidth。 /** 全屏的宽度 */ int m_ScreenHeight。 /** 全屏的高度 */ int m_BitsPerPixel。 /** 颜色位深 */ bool m_IsFullScreen。 /** 是否全屏 */ 以及 设置像素格式,设置像素格式首先要填充 PIXELFORMATDESCRIPTOR 结构,其默认设置如下 PIXELFORMATDESCRIPTOR pfd = /** 设置像素描述结构 */ { sizeof(PIXELFORMATDESCRIPTOR), /** 像素描述结构的大小*/ 1, /** 版本号 */ PFD_DRAW_TO_WINDOW | /** 缓存区的输出显示在一个窗口中 */ PFD_SUPPORT_OPENGL | /** 缓存区支持 OpenGL绘图 */ PFD_STEREO | /** 颜色缓存区是立体缓存 */ PFD_DOUBLEBUFFER, /** 颜色缓存区是双缓存 */ PFD_TYPE_RGBA, /** 使用 RGBA颜色格式 */ m_BitsPerPixel, /** 颜色缓存区中颜色值精品毕业论文、毕业设计,优质的论文服务: 精品论文网 提供毕业设计 (论文)和图文教程、视频教程等一揽子解决方案 所占的位深 */ 0, 0, 0, 0, 0, 0, /** 使用默认的颜色设置 */ 0, /** 无 Alpha缓存 */ 0, /** 颜色缓存区中 alpha成分的移位计数 */ 0, /** 无累计缓存区 */ 0, 0, 0, 0, /** 累计缓存区无移位 */ 32, /** 32位深度缓存 */ 0, /** 无蒙版缓存 */ 0, /** 无辅助缓存区 */ PFD_MAIN_PLANE, /** 必须为PFD_MAIN_PLANE,设置为主绘图层 */ 0, /** 表示 OpenGL实现所支持的上层或下层平面的数量 */ 0, 0, 0 /** 过时,已不再使用 */ }。 位图载入类 CBMPLoader BMP 图像文件格式 [3] BMP 是一种与硬件设备无关的图像 文件格式 ,使用非常广。 它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此, BMP 文件所占用的空间很大。 BMP 文件的图像深度可选 lbit、 4bit、 8bit及 24bit。 BMP 文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。 由于 BMP 文件格式是 Windows 环境中交换与图有关的数据的一种标准,因此在 Windows 环境中运行的图形图像软件都支持 BMP 图像格式。 典型的 BMP 图像文件由三部分组成 :位图文件头数据结构,它包含BMP 图像文件的类型、显示内容等信息;位图信息数据结构,它包含有BMP 图像的宽、高、压缩方法,以及定义颜色等信息。 BMP 是( Windows 位图 ) Windows 位图可以用任何颜色深度(从黑白到 24 位颜色)存储单个光栅图像。 Windows 位图文件格式与其他 Microsoft Windows 程序兼容。 它不支持文件压缩,也不适用于 Web 页。 从总体上看, Windows 位图文件格式的缺点超过了它的优点。 为了保证照片图像的质量,请使用 PNG 、 JPEG、 TIFF 文件。 BMP 文件适用于 Windows 中的墙纸。 精品毕业论文、毕业设计,优质的论文服务: 精品论文网 提供毕业设计 (论文)和图文教程、视频教程等一揽子解决方案 优点: BMP 支持 1 位到 24 位颜色深度。 BMP 格式与现有 Windows 程序(尤其是较旧的程序)广泛兼容。 缺点: BMP 不支持压缩,这会造成文件非常大。 BMP 文件不受 Web 浏览器支持。 位图载入类 CBMPLoader 流程图 如图 所示: 图 位图载入类流程图 基本框架的组成 键盘类和程序框架类( GLFrame): 键盘类: class Keys { public: Keys() { Clear()。 } /** 构造函数 */ void Clear() { ZeroMemory(amp。 m_KeyDown, sizeof(m_KeyDown))。 } /** 清空所有的按键信息 */ bool IsPressed(unsigned int key) { return (key MAX_KEYS) ? (m_KeyDown[key] == true) : false。 }/** 判断某个键是否按下 */ void SetPressed(unsigned int key) { if (key MAX_KEYS) m_KeyDown[key] = true。 }/** 设置某个键被按下 */ void SetReleased(unsigned int key){ if (key MAX_KEYS) m_KeyDown[key] = 打开文件并检查错误 读位图文件头信息判断是否为位图文件 读全文件 保存文件 创建指针 进行文件格式转换将 BGR转为 RGB 是 退出并报错 否 精品毕业论文、毕业设计,优质的论文服务: 精品论文网 提供毕业设计 (论文)和图文教程、视频教程等一揽子解决方案 false。 }/** 设置某个键被释放 */ private: static const unsigned int MAX_KEYS = 256。 bool m_KeyDown[MAX_KEYS]。 /** 保存 各 按键的状态 */ }。 在继承类中完成以下函数的实现 GLApplication * GLApplication::Create(const char * class_name) //创建子类的一个实例 bool Init()。 //执行所有的初始化工作,如果成功函数返回 true void Uninit()。 // 执行所有的卸载工作 void Update(DWORD milliseconds)。 //执行所有的更新操作,传入的参数为两次操作经过的时间,以毫秒 //为单位 void Draw()。 //执行所有的绘制操作 windowExtendedStyle = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE。 /** 使窗口具有 3D 外观 */ 5 视角控制 摄像机类解构图 如图 所示 摄像机类 设置速度 位置 旋转方向 根据鼠标设置摄像机观察方向 前后移动 左右移动 放置摄像机位置 与键盘关联 精品毕业论文、毕业设计,优质的论文服务: 精品论文网 提供毕业设计 (论文)和图文教程、视频教程等一揽子解决方案 图 摄像机类结构图 摄像机类主要的功能是实现三维漫游。 第一要做的事就是设置摄像机的位置: 设置摄像机的位置 ,朝向和向上向量。 设置函数为: void Camera::setCamera( float positionX, float positionY, float positionZ, float viewX, float viewY, float viewZ, float upVectorX, float upVectorY, float upVectorZ) 摄像机旋转功能的实现 旋转摄像机 旋转摄像机方向 函数为: void Camera::rotateView(float angle, float x, float y, float z) Angle为旋转的角度值, X,Y,Z为初始的位置。 Angle值由库函数获取。 下面是实现计算摄像机在空间中旋转了 angle弧度后,计算其视点 View更新的值newView。 Vector3 view = m_View m_Position。 /** 计算方向向量 */ /** 计算 sin 和 cos值 */ float cosTheta = (float)cos(angle)。 float sinTheta = (float)sin(angle)。 /** 计算旋转向量的 x值 */ = (cosTheta + (1 cosTheta) * x * x) *。 += ((1 cosTheta) * x * y z * sinTheta) *。 += ((1 cosTheta) * x * z + y * sinTheta) *。 /** 计算旋转向量的 y值 */ = ((1 cosTheta) * x * y + z * sinTheta) *。 += (cosTheta + (1 cosTheta) * y * y) *。 += ((1 cosTheta) * y * z x * sinTheta) *。 /** 计算 旋转向量的 z值 */ 精品毕业论文、毕业设计,优质的论文服务: 精品论文网 提供毕业设计 (论文)和图文教程、视频教程等一揽子解决方案 = ((1 cosTheta) * x * z y * sinTheta) *。 += ((1 cosTheta) * y * z + x * sinTheta) *。 += (cosTheta + (1 cosTheta) * z * z) *。 /** 更新摄像机的方向 */。基于opengl的3d游戏的设计与实现
相关推荐
在环境较恶劣区,电话线传送数据往往事倍功半。 另外,从水文传统人工监测技术分析来看,主要存在以下问题:(1)记录方式以模拟方式为主,就是数字方式记录也很难方便输入计算机处理;(2)数据处理基本靠人工处理判断,费时易错;(3)水文信息收集、传输、处理实时性和准确性较差,无法适应现代水文需求。 本文在总结前人经验的基础上,以水文数据收集为例,根据数据收集工作和管理工作的需要
客户端更简化 , 甚是简化到比手机还小的终端。 大部分的工作都是在服务器上完成。 综上所述,无论从硬件、软件及维护工作等方面权衡, B/S 结构都能降低整个网络结构体系的总体 成本。 因此,我们采用 B/S 结构 进行开发新闻发布系统。 FGSJJLKSJGKLJG JLS JGKJ KJ SKJ KJSKLGJKSJLKSJKL KSGK JKLGJSLSK JSGKL JLSGJSLJ
,师生不知晓、访问量低。 课程网站中师生间的交流互动、疑问解答、留言版中的留言等栏目基本上都在该精品课程立项评审期间启用,之后建设过程中很少得以更新升级。 相关课程教师之间的互相交流缺乏。 可见,各高校在精品课程的建设管理与督查工作上还有待进一步加强和重视。 表 13 国家精品课程资源中心统计数据 () 本科 高职位 网院 0308 年评选出的精品课程数量 1664 门 605 门 99 门
经济实惠的原则,采用 方案一。 温湿度 检测部分是用来显示 温湿 度信息,科学家根据不同的 检测 要求研制出多种方案,本人提取 几 种可以应用在本次系统的方案进行比较。 方案一: 采 用 Honeywell 公司相对湿度传感器 HIH3610,并配合 DALLAS 公司一线总线智能电池监视器件 DS2438 实现湿度采集,组成一种完全符合一线总线规范的湿度传感器。 相对湿度传感器 HIH3610
异步式 I/O 与事件驱动的架构设计。 传统架构对于高并发的解决方案是采用多线程模型,也就是一个系统线程处理一个业务逻辑,通过系统线程切方式弥补同步式 I/O 的时间开销。 采用的是单线程模型通过异步式的请求方式处理 I/O 调用,减少了切换上下文次数所造成的 开销。 运行的过程中将管理一个事件堆栈,不断地循环执行事件然后等待下一个事件的触发。 异步式 I/O 请求完成后将被推送到事件队列
图 25 结账信息 ER 图 图 26 交班信息 ER 图 结账信息 宾客类型 会员类型 餐台编号 账单编号 实付 卡号 卡内余额 打折 省去 应付 找零 积 分 结账方式 备注 交班信息表 刷卡营业 操作员 营业金额 账单数量 挂账金额 实收金额 现金营业 消费金额 会员交易量 当班时间 收押金额 退押金 充值金额 销账刷卡 销账现金 xx 机电高等专科学校毕业论文 7 逻辑结构设计 1.