计算机图形学试验

上传人:jct2****808 文档编号:135282601 上传时间:2020-06-14 格式:PPT 页数:73 大小:1.40MB
返回 下载 相关 举报
计算机图形学试验_第1页
第1页 / 共73页
计算机图形学试验_第2页
第2页 / 共73页
计算机图形学试验_第3页
第3页 / 共73页
计算机图形学试验_第4页
第4页 / 共73页
计算机图形学试验_第5页
第5页 / 共73页
点击查看更多>>
资源描述

《计算机图形学试验》由会员分享,可在线阅读,更多相关《计算机图形学试验(73页珍藏版)》请在金锄头文库上搜索。

1、计算机图形学试验 试验1 创建一个OpenGL窗口 打开VC然后创建一个新工程 创建一个新的Win32程序 不是console控制台程序 链接OpenGL库文件 Project Settings 工程 设置 然后单击LINK标签 增加OpenGL32 libGLu32 lib和GLaux lib后单击OK按钮 代码的前3行包括了我们使用的每个库文件的头文件 如下所示 include Windows的头文件 include 包含最新的gl h glu h库 include 包含OpenGL实用库 完成程序的开发 如下图所示参考程序 试验2 绘制简单图形 glLoadIdentity 重置当前的模

2、型观察矩阵 将当前点移到了屏幕中心 X坐标轴从左至右 Y坐标轴从下至上 Z坐标轴从里至外 OpenGL屏幕中心的坐标值是X和Y轴上的0 0f点 glTranslatef x y z 沿着X Y和Z轴移动 glTranslatef 1 5f 0 0f 6 0f 左移1 5单位 并移入屏幕6 0 glBegin GL TRIANGLES 绘制三角形glVertex3f 0 0f 1 0f 0 0f 上顶点glVertex3f 1 0f 1 0f 0 0f 左下顶点glVertex3f 1 0f 1 0f 0 0f 右下顶点glEnd 三角形绘制结束 0 0f 1 0f 0 0f 1 0f 1 0f

3、 0 0f 1 0f 1 0f 0 0f glBegin GL QUADS 绘制正方形glVertex3f 1 0f 1 0f 0 0f 左上glVertex3f 1 0f 1 0f 0 0f 右上glVertex3f 1 0f 1 0f 0 0f 左下glVertex3f 1 0f 1 0f 0 0f 右下glEnd 正方形绘制结束 1 0f 1 0f 0 0f 1 0f 1 0f 0 0f 1 0f 1 0f 0 0f 1 0f 1 0f 0 0f 在在第一实验的基础上 在完成程序的DrawGLScene 过程中增加代码 glClear GL COLOR BUFFER BIT GL DEP

4、TH BUFFER BIT 清除屏幕及深度缓存glLoadIdentity 重置当前的模型观察矩阵glTranslatef 1 5f 0 0f 6 0f 左移1 5单位 并移入屏幕6 0glBegin GL TRIANGLES 绘制三角形glVertex3f 0 0f 1 0f 0 0f 上顶点glVertex3f 1 0f 1 0f 0 0f 左下glVertex3f 1 0f 1 0f 0 0f 右下glEnd glTranslatef 3 0f 0 0f 0 0f 右移3单位glBegin GL QUADS 绘制正方形glVertex3f 1 0f 1 0f 0 0f 左上glVerte

5、x3f 1 0f 1 0f 0 0f 右上glVertex3f 1 0f 1 0f 0 0f 左下glVertex3f 1 0f 1 0f 0 0f 右下glEnd 正方形绘制结束 画完三角形后 我们要移到右半部分来画正方形 否则两个图形会相互重叠 完成程序的开发 如下图所示参考程序 试验3着色 glColor3f r g b 括号中的三个参数依次是红 绿 蓝三色分量 参数取值范围从0 0f到1 0f glColor3f 1 0f 0 0f 0 0f 红色glColor3f 0 0f 1 0f 0 0f 绿色glColor3f 0 0f 0 0f 1 0f 蓝色 修改实验2中 画三角形的代码为

6、 glBegin GL TRIANGLES 绘制三角形glColor3f 1 0f 0 0f 0 0f 设置当前色为红色glVertex3f 0 0f 1 0f 0 0f 上顶点glColor3f 0 0f 1 0f 0 0f 设置当前色为绿色glVertex3f 1 0f 1 0f 0 0f 左下glColor3f 0 0f 0 0f 1 0f 设置当前色为蓝色glVertex3f 1 0f 1 0f 0 0f 右下glEnd 修改实验2中 画正方形的代码为 glColor3f 0 5f 0 5f 1 0f 一次性将当前色设置为蓝色glBegin GL QUADS 绘制正方形glVertex

7、3f 1 0f 1 0f 0 0f 左上glVertex3f 1 0f 1 0f 0 0f 右上glVertex3f 1 0f 1 0f 0 0f 左下glVertex3f 1 0f 1 0f 0 0f 右下glEnd 正方形绘制结束 完成程序的开发 如下图所示参考程序 试验4旋转 glRotatef Angle Xvector Yvector Zvector 负责让对象绕某个轴旋转 Xvector Yvector和Zvector三个参数则共同决定旋转轴的方向 比如 1 0 0 所描述的矢量经过X坐标轴的1个单位处并且方向向右 1 0 0 所描述的矢量经过X坐标轴的1个单位处 但方向向左 X轴

8、 您正在使用一台台锯 锯片中心的轴从左至右摆放 就像OpenGL中的X轴 尖利的锯齿绕着X轴狂转 看起来要么向上转 要么向下转 取决于锯片开始转时的方向 这与我们在OpenGL中绕着X轴旋转什么的情形是一样的 Y轴 假设您正处于一个巨大的龙卷风中心 龙卷风的中心从地面指向天空 就像OpenGL中的Y轴 垃圾和碎片围着Y轴从左向右或是从右向左狂转不止 这与我们在OpenGL中绕着Y轴旋转什么的情形是一样的 Z轴 您从正前方看着一台风扇 风扇的中心正好朝着您 就像OpenGL中的Z轴 风扇的叶片绕着Z轴顺时针或逆时针狂转 这与我们在OpenGL中绕着Z轴旋转什么的情形是一样的 在实验3中画三角形的

9、语句前添加glRotatef rtri 0 0f 1 0f 0 0f 绕Y轴旋转三角形在屏幕的左面画了一个彩色渐变三角形 并绕着Y轴从左向右旋转 在实验3中画正方形的前面加上语句 glRotatef rquad 1 0f 0 0f 0 0f 绕X轴旋转四边形 完成程序 后效果如下 参考程序 试验5三维图形 给三角形增加一个左侧面 一个右侧面 一个后侧面来生成一个金字塔 四棱锥 计算好坐标 绘制其它侧面三角形的方法相同 注意所有的面 三角形都是逆时针次序绘制的 给正方形增加左 右 上 下及背面生成一个立方体 计算好坐标 绘制其它侧面正方形的方法相同 所有的四边形都以逆时针次序绘制 在3D空间创建

10、对象的方法 必须将OpenGL屏幕想象成一张很大的画纸 后面还带着许多透明的层 差不多就是个由大量的点组成的立方体 这些点从左至右 从上至下 从前到后的布满了这个立方体 如果您能想象的出在屏幕的深度方向 应该在设计新3D对象时没有任何问题 程序完成的 效果如下 参考程序 微分的思想 画圆是由很多个小的三角形组成glBegin GL TRIANGLE FAN glVertex3f 0 0 0 0f for i 0 i 360 i 30 floatp float i 3 14 180 glVertex3f float sin p float cos p 0 0f glEnd 画圆柱 试验6纹理映射

11、 在第一实验代码开始处增加新代码 include 在ReSizeGLScene 之前 增加了下面这一段代码 用来加载位图文件AUX RGBImageRec LoadBMP char Filename 载入位图图象 FILE File NULL 文件句柄if Filename 确保文件名已提供 returnNULL 如果没提供 返回NULL File fopen Filename r 尝试打开文件if File 文件存在么 fclose File 关闭句柄returnauxDIBImageLoad Filename 载入位图并返回指针 returnNULL 如果载入失败 返回NULL 涉及到的函

12、数 glGenTextures 1 texture 0 告诉OpenGL想生成一个纹理名字 如果想载入多个纹理 加大数字 glBindTexture GL TEXTURE 2D texture 0 告诉OpenGL将纹理名字texture 0 绑定到纹理目标上 2D纹理只有高度 在Y轴上 和宽度 在X轴上 主函数将纹理名字指派给纹理数据 glBindTexture GL TEXTURE 2D texture 所使用纹理对应的数字 选择要绑定的纹理 当您想改变纹理时 应该绑定新的纹理 有一点值得指出的是 您不能在glBegin 和glEnd 之间绑定纹理 必须在glBegin 之前或glEnd

13、之后绑定 glTexImage2D GL TEXTURE 2D 0 3 TextureImage 0 sizeX TextureImage 0 sizeY 0 GL RGB GL UNSIGNED BYTE TextureImage 0 data 告诉OpenGL此纹理是一个2D纹理 GL TEXTURE 2D 参数 0 代表图像的详细程度 通常就由它为零去了 参数三是数据的成分数 因为图像是由红色数据 绿色数据 蓝色数据三种组分组成 TextureImage 0 sizeX是纹理的宽度 如果您知道宽度 您可以在这里填入 但计算机可以很容易的为您指出此值 TextureImage 0 size

14、y是纹理的高度 参数零是边框的值 一般就是 0 GL RGB告诉OpenGL图像数据由红 绿 蓝三色数据组成 GL UNSIGNED BYTE意味着组成图像的数据是无符号字节类型的 最后 TextureImage 0 data告诉OpenGL纹理数据的来源 此例中指向存放在TextureImage 0 记录中的数据 glTexParameteri 告诉OpenGL在显示图像时 当它比放大得原始的纹理大 GL TEXTURE MAG FILTER 或缩小得比原始得纹理小 GL TEXTURE MIN FILTER 时OpenGL采用的滤波方式 通常这两种情况下都采用GL LINEAR 为了将纹理

15、正确的映射到四边形上 您必须将纹理的右上角映射到四边形的右上角 纹理的左上角映射到四边形的左上角 纹理的右下角映射到四边形的右下角 纹理的左下角映射到四边形的左下角 如果映射错误的话 图像显示时可能上下颠倒 侧向一边或者什么都不是 glTexCoord2f的第一个参数是X坐标 0 0f是纹理的左侧 0 5f是纹理的中点 1 0f是纹理的右侧 glTexCoord2f的第二个参数是Y坐标 0 0f是纹理的底部 0 5f是纹理的中点 1 0f是纹理的顶部 所以纹理的左上坐标是X 0 0f Y 1 0f 四边形的左上顶点是X 1 0f Y 1 0f 其余三点依此类推 测试glTexCoord2f的X

16、 Y坐标参数 把1 0f改为0 5f将只显示纹理的左半部分 把0 0f改为0 5f将只显示纹理的右半部分 intLoadGLTextures 载入位图 调用上面的代码 并转换成纹理 intStatus FALSE 状态指示器AUX RGBImageRec TextureImage 1 创建纹理的存储空间memset TextureImage 0 sizeof void 1 将指针设为NULL 载入位图 检查有无错误 如果位图没找到则退出if TextureImage 0 LoadBMP Data NeHe bmp Status TRUE 将Status设为TRUEglGenTextures 1 线形滤波 if TextureImage 0 纹理是否存在 if TextureImage 0 data 纹理图像是否存在 free TextureImage 0 data 释放纹理图像占用的内存 free TextureImage 0 释放图像结构 InitGL GLvoid 改动为 intInitGL GLvoid 此处开始对OpenGL进行所有设置 if LoadGLTextures 调用

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

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