ImageVerifierCode 换一换
格式:DOCX , 页数:9 ,大小:40.12KB ,
资源ID:6445550      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6445550.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验三 消隐.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实验三 消隐.docx

1、实验三 消隐湘 潭 大 学 实 验 报 告课程名称 计算机图形学 实验名称 消隐 页数 专业 计算机科学与技术 班级 12级计算机2班 同组者姓名 学号 * 姓名 黄柳 实验日期_2015-4-20 _一、 实验目的1)了解OpenGL 图形库的功能和结构;2)学习了解OpenGL 程序的基本结构,及常用函数; 3)学习使用OpenGL 消隐, 画一个正方体的消隐图; 二、 实验内容和要求 1)使用OpenGL 编写一个简单的C+程序,使该程序能够绘制出消隐的正方体。 使得现实中看不见的面在屏幕上也看不见。 三、 实验方案设计主要设计思路:1)在系统上配置好OpenGL的环境(头文件,库文件,

2、和链接库文件);2)使用Visual V+6.0 新建一个C+文档,并创建相应的工程;3)在文档中引入OpenGL的头文件,编辑代码实现。算法设计:算法流程图:四、程序运行结果及分析五、性能、扩展性等方面存在的不足和可能的改进之处。 在完成计算机图形学消隐实验后,我发现还有许多不足,所学到的知识还远远不够,以至于还有一些功能不能很好完成。其实我的这个设计只是一个很简单的东西,仅仅实现了最简单的透视投影图,三视图的算法罢了,受限于知识缺乏的影响,不能实现较理想的设计。我认为较理想的设计是,最重要的一点是增加设计的灵动性,最大便利于用户和观众,让他们觉得这个设计是不错的东西。可以再程序中实现让用户

3、输入三维物体的顶点和面的信息,并且建立一个三维坐标系将图形放在原点处,使用户一目了然,同时也将三视图置于二维坐标系中,并标出哪个是哪个图形,即各个图形代表的意思。 我认为解决以上问题只有通过在以后的学习,对图形学和OpenGL有更深的了解才有可能解决该问题。同时要彻底学好C+这门语言,没有精通的语言,就无法实现更完美的功能和设计。 这次实践增强了我的动手能力,提高和巩固了图形学方面的知识,特别是软件方面。让我认识到把理论应用到实践中去是多么重要。这个过程中,我花费了大量的时间和精力,更重要的是,我在学会实践的基础上,同时还懂得合作精神的重要性,学会了互相学习。 这次课程设计终于顺利完成了,在设

4、计中遇到了很多编程问题,最后在各位同学和老师地帮助下,终于游逆而解。同时,在老师那里我学到了很多实用的知识。我表示再次衷心的感谢! 附件 实验代码1.#include stdio.h2.#include 3.#include 4.5./用于确定当前的深度比较测试方式6.GLenum DepthFunc = GL_LESS; 7./初始化8.void Initial()9.10. glEnable(GL_DEPTH_TEST); / 启用深度测试11. /glClearColor(1.0f, 1.0f, 1.0f, 1.0f );12. glClearColor(0.9,0.9,0.8,1.0)

5、; /初始背景色 13. /* 光照处理 */ 14. GLfloat light_ambient = 0.0, 0.0, 0.0, 1.0 ;15. GLfloat light_diffuse = 1.0, 1.0, 1.0, 1.0 ;16. GLfloat light_specular = 1.0, 1.0, 1.0, 1.0 ;17. GLfloat light_position0 = 0.0, 0.0, -220 ,1.0 ;18. /定义光位置得齐次坐标(x,y,z,w),如果w=1.0,为定位光源(也叫点光源),19. /如果w0,为定向光源(无限光源),定向光源为无穷远点,因而

6、产生光为 20. /平行光。 21. glLightfv(GL_LIGHT0, GL_AMBIENT , light_ambient ); /环境光 22. glLightfv(GL_LIGHT0, GL_DIFFUSE , light_diffuse ); /漫射光 23. glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); /镜面反射 24. glLightfv(GL_LIGHT0, GL_POSITION, light_position0); /光照位置25.26. /* 材质处理 */ 27./* GLfloat mat_ambient

7、 = 0.0, 0.2, 1.0, 1.0 ;28. GLfloat mat_diffuse = 0.8, 0.5, 0.2, 1.0 ; 29. GLfloat mat_specular = 1.0, 1.0, 1.0, 1.0 ;30. GLfloat mat_shininess = 100.0 ; /材质RGBA镜面指数,数值在0128范围内 31. 32. glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);33. glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);34. glMaterialfv

8、(GL_FRONT, GL_SPECULAR, mat_specular);35. glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);36.*/37. glEnable(GL_LIGHTING); /启动光照 38. glEnable(GL_LIGHT0); /使第一盏灯有效 39. glEnable(GL_DEPTH_TEST); /测试深度缓存 40. /* 其他可选项 */ 41. / glDepthFunc(GL_LESS); /函数指定比较函数,用来比较每个引入象素的z值和深度缓存中给定的z值,只有当42. /激活深度检验时才执行

9、此比较。 43. / glEnable(GL_CULL_FACE); / :在三维空间中,一个多边形虽然有两个面,44.45. /但我们无法看见背46. /面的那些多边形,而一些多边形虽然是正面的,但被其他多边形所遮挡。如果将47. /无法看见的多边形和可见的多边形同等对待,无疑会降低我们处理图形的效率。48. /在这种时候,可以将不必要的面剔除。49. / glCullFace(GL_FRONT); /glCullFace的参数可以是GL_FRONT,GL_BACK或者GL_FRONT_AND_BACK,分别表示50. /剔除正面、剔除反面、剔除正反两面的多边形。51. glEnable(G

10、L_COLOR_MATERIAL); /材质颜色追踪当前颜色52.53.54.void ChangeSize(int w, int h)55.56. if(h = 0) h = 1;57. glViewport(0, 0, w, h);58. glMatrixMode(GL_PROJECTION);59. glLoadIdentity();60. GLfloat fAspect;61. fAspect = (float)w/(float)h;62. /透视投影63. gluPerspective(45.0, fAspect, 1.0, 500.0);64. glMatrixMode(GL_MO

11、DELVIEW); 65. glLoadIdentity();66.67.68.69./鼠标点击70.void MousePlot(GLint button,GLint action,GLint xMouse,GLint yMouse)71. if(button=GLUT_LEFT_BUTTON & action=GLUT_DOWN)72. if(DepthFunc = GL_LESS)73. DepthFunc = GL_GREATER;74. glClearDepth (0.0);/不同的比较测试方式需要不同的初始化值75. printf(关闭深度测试,不能消隐!n);76. 77. el

12、se if(DepthFunc = GL_GREATER)78. DepthFunc = GL_LESS;79. glClearDepth (1.0);80. printf(启动深度测试,可以实现消隐!n);81. 82. 83.84.85.void Display(void)86.87. static float fElect1=0.0f,fElect2=0.0f,fElect3=0.0f; 88. glDepthFunc(DepthFunc); /设置深度比较测试方式89. 90. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 91

13、.92. glMatrixMode(GL_MODELVIEW); 93. glLoadIdentity();94.95. glTranslatef(0.0f, 0.0f, -250.0f);96. glColor3f(1.0f, 0.4f, 0.2f);97. /中心球98. glutSolidSphere(16.0f, 24, 24);99.100.101. glColor3f(0.6f, 0.6f, 1.0f);102. /环绕球1103. glPushMatrix();104. glRotatef(fElect1, 0.0f, 1.0f, 0.0f);105. glTranslatef(

14、90.0f, 0.0f, 0.0f);106. glutSolidSphere(6.0f, 16, 16); 107. glPopMatrix(); 108.109. glColor3f(1.0f, 1.0f, 0.8f);110. /环绕球2111. glPushMatrix(); 112. glRotatef(45.0f, 0.0f, 0.0f, 1.0f); 113. glRotatef(fElect2, 0.0f, 1.0f, 0.0f); 114. glTranslatef(-70.0f, 0.0f, 0.0f); 115. glutSolidSphere(10.0f, 16, 16

15、);116. glPopMatrix();117.118. glColor3f(0.5f, 1.0f, 1.0f);119. /环绕球3120. glPushMatrix(); 121. glRotatef(-45.0f,0.0f, 0.0f, 1.0f);122. glRotatef(fElect3, 0.0f, 1.0f, 0.0f);123. glTranslatef(0.0f, 0.0f, 40.0f);124. glutSolidSphere(3.0f, 16, 16);125. glPopMatrix();126.127. /旋转角度参数递增128. fElect1 += 10.0

16、f;129. fElect2 += 5.0f;130. fElect3 += 20.0f;131. if(fElect1 360.0f) fElect1 = 10.0f;132. if(fElect2 360.0f) fElect2 = 5.0f;133. if(fElect3 360.0f) fElect3 = 20.0f; 134.135. glutSwapBuffers();136.137./定时函数138.void TimerFunc(int value)139.140. glutPostRedisplay();141. glutTimerFunc(100, TimerFunc, 1)

17、;142.143.144.int main(int argc, char* argv)145.146. glutInit(&argc, argv);147. glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);148. glutInitWindowSize(600,600);149. glutCreateWindow(透视与深度测试);150. glutReshapeFunc(ChangeSize);151. glutDisplayFunc(Display);152. glutMouseFunc(MousePlot);153. glutTimerFunc(300, TimerFunc, 1); 154. Initial();155. glutMainLoop();156. return 0;157.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1