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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

计算机图形学大作业报告(灯光纹理映射).docx

1、大作业报告实验课程名称:计算机图形学学 生 姓 名 : 班级: 学院(系): 学生学号: 指 导 教 师: 成绩: 23一、目的这次大作业是作为这学期的最后的一个考核,所以必须要用到所有的本学期学过的知识, 比如 怎样画出三维图形,怎样在图像上在图像上添加纹理光照,怎样使用鼠标和键盘进行人机交互等。二、主要功能模块设计1 矩阵运算模块的设计:功能描述:程序启动后,这部分功能模块会为整个应用程序提供算法支持,具体是矩阵直接的相互运算,在 2D 向 3D 转化过程中会起到很重要的作用。代码设计:float vv(float * v1, float * v2)return v10 * v20 + v

2、11 * v21 + v12 * v22;void vxv(float * n, float * v1, float * v2) n0 = v11 * v22 - v12 * v21;n1 = v12 * v20 - v10 * v22;n2 = v10 * v21 - v11 * v20;void loadIdentity(Matrix m)Matrix identity = 1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0;for(int i = 0;i 4; i+) for(int j = 0;j 4; j+)

3、mij = identityij;void preMultiply(Matrix p, Matrix m)int i , j;Matrix t;for( i = 0; i 4; i +) for( j = 0; j 4; j+)tij = pi0 * m0j + pi1 * m1j + pi2 * m2j + pi3* m3j;for( i = 0; i 4; i +) for( j = 0; j 4; j +)mij = tij;2 显示图形模块的设计:功能描述:该模块主要为所要画的图形进行描述,是绘制图形的主要函数,通过调用这个功能模块就能画出用于显示给用户的图形。代码设计:/2D图形的d

4、isplay函数void display()glClear(GL_COLOR_BUFFER_BIT);if(n = 1 & type =GL_LINE_STRIP) glBegin(GL_POINTS); glVertex2iv(vert0); glColor3f(0,0.5,0.5);glVertex2i(width-vert00-1,vert01);glEnd();glColor3f(0,0.5,0.5); glBegin(GL_LINES);glVertex2i(width/2,0); glVertex2i(width/2,height-1);glEnd();glBegin(type);

5、for(int i = 0;in;i+) glVertex2i(width-verti0-1,verti1); glEnd();glColor3f(1,1,0); glBegin(type);for(int i = 0;in;i+) glVertex2iv(verti); glEnd();glutSwapBuffers(); initQMesh(); glutSetWindow(winid); glutPostRedisplay();/3D图形的显示函数void modelDisplay()glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);g

6、lPushMatrix(); float M16;for(int r = 0; r 4; r+) for(int c = 0; c 4; c+) M4 * c + r = CRMrc; glMultMatrixf(M);glScalef(zoom,zoom,zoom); drawQMesh(); glPopMatrix(); glPushMatrix();glLightfv(GL_LIGHT0,GL_AMBIENT,amb); glLightfv(GL_LIGHT0, GL_POSITION, lightPosition); glPopMatrix();glutSwapBuffers();3

7、键盘敲击模块功能描述:该功能主要为两个窗体添加键盘敲击事件,在 2D 窗体中主要添加了反走样效果,清除所画的图,点线转化功能,对于 3D 窗体主要添加了投影方式的变换,光源移动的功能代码设计:/2D 绘制窗体的键盘敲击处理函数void keyboard(unsigned char key, int x,int y) switch(key)case a: antialiasing = ! antialiasing;/反走样效果if(antialiasing) glEnable(GL_BLEND); glEnable(GL_LINE_SMOOTH);elseglDisable(GL_BLEND);

8、 glDisable(GL_LINE_SMOOTH);break;case c: n = 0;break;/清除界面功能case l: type = GL_LINE_STRIP;break; /绘制线功能case v: type = GL_POINTS;break;/绘制点功能glutPostRedisplay();/3D 显示窗体的键盘敲击事件处理函数:void modelKeyboard(unsigned char key, int x, int y) switch (key) case o:glMatrixMode(GL_PROJECTION);/正投影glLoadIdentity();

9、 glOrtho(-4,4,-4,4,6,14);glMatrixMode(GL_MODELVIEW); break;case p:glMatrixMode(GL_PROJECTION);/侧投影,不过是默认的glLoadIdentity();gluPerspective(45.0,1.0,6.0,14.0); glMatrixMode(GL_MODELVIEW);break;case m:lightPosition0 = lightPosition0 - 0.5; /光源移动break;case n:lightPosition1 = lightPosition1 - 0.5;break;ca

10、se z:lightPosition2 = lightPosition2 - 0.5; break;case k:glDisable(GL_FOG); break;glutPostRedisplay();4 鼠标点击模块功能描述:该功能模块主要实现了对两个窗体鼠标事件的处理,对于 3D 窗体实现了鼠标左键旋转,由键放大缩小的效果,2D 窗体实现了左键画点,右键可以对已经存在的点改变它的位置。代码设计:/3D 窗体的鼠标事件void modelMouse(int button,int state,int x,int y) switch (button)case GLUT_LEFT_BUTTON:

11、if(state = GLUT_DOWN ) cx = x;cy = h - 1 - y; dx = dy = 0;left_button_down = true;elseleft_button_down = false; break;case GLUT_RIGHT_BUTTON:if(state = GLUT_DOWN) cx = x;cy = h - 1 - y; right_button_down = true;elseright_button_down = false; break;/2D 窗体鼠标事件void mouse(int button, int state, int x ,i

12、nt y) y = height - 1 - y;switch(button)case GLUT_LEFT_BUTTON:if(state = GLUT_DOWN & ! rubberbanding ) v = n+;vertv0 = (x = width) ? width - 1 : x; vertv1 = (y = height) ? height -1 : y; rubberbanding = true;glutPostRedisplay();else rubberbanding = false; break;case GLUT_RIGHT_BUTTON:if(state = GLUT_

13、DOWN & ! rubberbanding & (v = findVertex(x,y) != -1) if(glutGetModifiers() = GLUT_ACTIVE_CTRL) for (int i = v; i n-1; i+) vertv0 = verti+10;verti1 = verti+11;n-;elsevertv0 = (x = width) ? width - 1 : x; vertv1 = (y = height) ? height -1 : y; rubberbanding = true;glutPostRedisplay();else rubberbanding = false; break;功能截图:利用鼠标在界面上画出原来的图,截图如下:按住“Z”后,上方的光照变化,截图如下:按住“Y”后,下方的光照效果发生变化,截图如下:使用鼠标实现图像方向的变化,截图如下:使用鼠标实现图像大小的变化,截图如下:放大:缩小:三、心得通过对本次大作业试验

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

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