计算机图形学实验 - 真实感图形场景的生成_第1页
计算机图形学实验 - 真实感图形场景的生成_第2页
计算机图形学实验 - 真实感图形场景的生成_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机图形学实验 - 真实感图形场景的生成 实验四 真实感图形的生成 一、 实验内容 ? ? ? ? 创建一个简单场景 场景中有一个复杂的三维几何体 通过一系列处理使得场景和几何体具有真实感 可以通过变换视点观察场景 二、 程序结构 创建win32 console application,使用opengl的控制台应用程序框架。其中: ? init()函数进行场景初始化工作; ? reshape(glsizei width, glsizei height)函数设置窗口的视口大小, 同时设置透视深度和透视角度等参数; ? display()函数构建坐标系并通过调用具体的绘制图形函数来绘制具体 场景

2、和几何图形; ? loadbmp()函数导入纹理位图文件; ? loadtexture()函数加载纹理到内存空间中; ? generateshadow(glfloat shadow44, const glfloat ground4, const glfloat light4)函数来计算空间中物体上任意一点的平面阴影投射矩阵 ? keyboard(unsigned char key, int x, int y)函数处理键盘按键消息; ? mousebutton(int button, int state, int x, int y)函数处理鼠标按 键消息; 最后由主函数main(int argc

3、, char* argv)中调用opengl函数来显示窗口,并进行绘图和处理事件消息函数。 三、 代码说明 1. 加载位图纹理 首先,编写loadbmp()函数导入位图文件,代码截图如下: 然后,编写loadearthtexture()函数加载导入的位图并设置相关参数,代码 截图如下: 2. 绘制房间场景 在drawscene()函数中调用opengl基本几何元素绘制过程glbegin(gl_quads)绘制4个平面,并为每个平面绑定相应的纹理图片,主要代码截图如下: 3. 绘制地球仪模型 编写drawearth()函数绘制地球仪模型,并为地球仪模型绑定对应的纹理贴图,同时增加光照和材质的处理

4、,代码截图如下: 4. 绘制模拟点光源 编写drawbulb()函数绘制模拟点光源及灯罩,首先调用glbegin(gl_triangle_strip)绘制4个三角形面构成棱锥形灯罩的4个侧面,然后调用glusphere()函数绘制球形灯泡并增加光照和材质处理效果,代码截图如下: 5. 生成阴影 根据点光源、物体上的任意一点、物体在平面上的投影点“三点共线”的几何原理,以及投影点在平面上的位置关系,通过平面方程求得其法向量,然后利用点光源和物体上一点的坐标进行计算,得出物体上该点的平面阴影投射矩阵。因此编写generateshadow(glfloat shadow44, const glfloa

5、t ground4, const glfloat light4)来实现该矩阵的计算,代码截图如下: 然后在display()函数中调用上面的函数计算出地球仪模型的阴影投射矩阵,然后与模型矩阵进行相乘,进而绘制模型的阴影,代码截图如下: 6. 场景初始化参数设置,重绘窗口及视点设置 在init()函数中首先清除屏幕颜色和深度缓存,然后设置明暗处理和启用光照等参数,进行整个场景的初始化设置,代码截图如下: 在reshape(glsizei width, glsizei height)函数中设置视点的初始位置,以及透视投影的深度和角度,代码截图如下: 7. 键盘按键、鼠标按键消息处理 编写keyboard()函数处理键盘按键消息,对相关参数变量修改其步长,最后调用glutpostredisplay()函数进行重绘窗口,部分代码截图如下: 编写mo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论