图形学实验报告 OpenGL中的变换.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
图形学实验报告 OpenGL中的变换

《计算机图形学基础》 实验6 OpenGL中的变换 一、实验目的OpenGL中的各种变换的实现原理; 掌握OpenGL中模型视图矩阵的操作方法。 掌握OpenGL中投影变换的实现方法。 二、实验环境 主要是软件开发环境 VC 6.0 三、实验内容 1、分子动画示例 2、深度测试示例 四、实验结果 1、分子动画 五、程序代码 1.分子动画 #include gl/glut.h void Initial() { glEnable(GL_DEPTH_TEST); // 启用深度测试 glClearColor(1.0f, 1.0f, 1.0f, 1.0f ); //背景为白色 } void ChangeSize(int w, int h) { if(h == 0) h = 1; glViewport(0, 0, w, h); // 设置视区尺寸 glMatrixMode(GL_PROJECTION); // 指定当前操作投影矩阵堆栈 glLoadIdentity(); // 重置投影矩阵 GLfloat fAspect; fAspect = (float)w/(float)h; // 计算视区的宽高比 gluPerspective(45.0, fAspect, 1.0, 500.0); // 指定透视投影的观察空间 glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void Display(void) { static float fElect1 = 0.0f; // 绕原子旋转的角度 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //清除颜色和深度缓冲区 glMatrixMode(GL_MODELVIEW); // 指定当前操作模型视图矩阵堆栈 glLoadIdentity(); // 重置模型视图矩阵 glTranslatef(0.0f, 0.0f, -250.0f); //将图形沿z轴负向移动 glColor3f(1.0f, 0.0f, 0.0f); glutSolidSphere(12.0f, 15, 15); // 绘制红色的原子 glColor3f(0.0f, 0.0f, 0.0f); glPushMatrix(); // 保存当前的模型视图矩阵 glRotatef(fElect1, 0.0f, 1.0f, 0.0f); // 绕y轴旋转一定的角度 glTranslatef(90.0f, 0.0f, 0.0f); // 平移一段距离 glutSolidSphere(6.0f, 15, 15); // 画出第一个电子 glPopMatrix(); // 恢复模型视图矩阵 glPushMatrix(); // 保存当前的模型视图矩阵 glRotatef(45.0f, 0.0f, 0.0f, 1.0f); //绕z轴旋转45° glRotatef(fElect1, 0.0f, 1.0f, 0.0f); glTranslatef(-70.0f, 0.0f, 0.0f); glutSolidSphere(6.0f, 15, 15); // 画出第二个电子 glPopMatrix(); // 恢复模型视图矩阵 glPushMatrix(); // 保存当前的模型视图矩阵 glRotatef(-45.0f,0.0f, 0.0f, 1.0f); //绕z轴旋转-45° glRotatef(fElect1, 0.0f, 1.0f, 0.0f); glTranslatef(0.0f, 0.0f, 60.0f); glutSolidSphere(6.0f, 15, 15); // 画出第三个电子 glPopMatrix(); fElect1 += 10.0f; // 增加旋转步长,产生动画效果 if(fElect1 360.0f) fElect1 = 10.0f; glutSwapBuffers(); } void TimerFunc(int value) { glutPostRedisplay(); glutTimerFunc(100, TimerFunc, 1); } int main(i

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档