ImageVerifierCode 换一换
格式:DOC , 页数:54 ,大小:472.54KB ,
资源ID:3326106      下载积分:16 金币
验证码下载
登录下载
邮箱/手机:
图形码:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

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

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

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请


权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4009-655-100;投诉/维权电话:18658249818。

注意事项

本文(计算机图形学课程设计.doc)为本站上传会员【精****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

计算机图形学课程设计.doc

1、《计算机图形学》实验报告 题目: 3D真实感场景绘制 姓名: 郭继杰 学号: 班级: 地信141 学院: 理学院 指导老师: 解山娟 日期: 2023年1月1日 一、 实验目的 结合一学期所学计算机图形学知识,基于专业背景,使用Op

2、enGL绘制简朴的3D真实感图形场景。 二、 实验规定 应用光栅化算法、多边形裁剪计算以及消隐算法在场景绘制中,其中真实感场景绘制涉及颜色模型、纹理模型、雾化模型、运动模型以及环境光、漫反射、镜面反射等光照模型设立。 三、 实验小组及任务分工 小组成员 任务分工 金 城 纹理贴图,颜色模型,雾化模型 郭继杰 运动模型,光照模型 沈黎达 材料收集,代码整合 四、 实验内容 1.实验前期工作 前期工作通过小组成员充足讨论,资料收集,最终拟定小组实验模板为以下两幅场景。目的是实现一艘简朴3D帆船模型以及一辆3D小车模型 2.程序编译环境:Visual Stud

3、io 2023 3.光照模型建立过程 光照模型建立流程图: 3.1设立光照模型相应指数 3.2打开光源 光照模型设计过程有两点注意的是: 1、glShadeModel函数用于控制opengl中绘制指定两点间其他点颜色的过渡模式,参数一般为GL_SMOOTH、GL_FLAT,假如两点的颜色相同,使用两个参数效果相同,假如两点颜色不同,GL_SMOOTH会出现过渡效果,GL_FLAT 则只是以指定的某一点的单一色绘制其他所有点。 glShadeModel(GL_FLAT) 着色模式 glShadeModel(GL_SMOOTH)着色模式

4、可以看出GL_SMOOTH模式下颜色更加光滑) 2、需要使用光照模型时必须启用,glEnable(GL_LIGHTING)(启用灯源)、 glEnable(GL_LIGHT0)(启用光源),否则所有灯光效果都会无效。效果对比如下图所示。 (未启用灯光) (启用灯光) (未启用灯光) (启用灯光) 4.颜色模型建立过程 1.设定多边形图形:OpenGL运用glBegin()函数画图形样式,里面的参数表达图形样式,这里以glBegin(GL_QUADS)为例,GL_QU

5、ADS表达绘制由四个顶点组成的一组单独的四边形。 2.设定颜色:OpenGL运用glColor3f(a,b,c)函数设立图形颜色,里面的参数表达设定颜色的颜色。 3.坐标设定:OpenGL运用glVertex3f(a,b,c)函数设立图形坐标,里面的参数表达坐标的位置。 以跑道颜色模型为例: (未使用颜色模型) (使用颜色模型) 5.雾化模型建立过程 雾是生活中比较常见的现象,有了雾化模型,场景会比较逼真。 1.建立过程及参数设定如下: 2.其中,设立雾气起始位置与结束位置可以使雾气浓度随运动模型变化。 3.效果对比 (未使用雾化)

6、 (使用雾化) 4.实验存在局限性之处,由于本实验的场景绘制不是特别接近真实感,所以雾化模型的效果不是很好。 6.运动模型建立过程 1. 本次实验的运动模型重要由键盘按键响应发生。 2. 设定键盘按键响应函数 void specialKeyBoard(int key,int x,int y) 在主函数入口设定设立当前窗口的特定键的回调函数 glutSpecialFunc(specialKeyBoard); glTranslatef(0,0,0.1+delta_v);//表达将当前图形向x轴平移0,向y轴平移0,向z轴平移0.1+del

7、ta ,表达物体在这个坐标的时候开始绘制。 glutPostRedisplay();在图像绘制的所有操作之后, 要加入 glutPostRedisplay()函数来重绘图像。实现物体的移动 glRotatef(1,0,1,0); //,旋转角度函数,表达小车往(0,1,0)向量方向逆时针旋转1° 以上都是控制小车运动的函数,通过键盘响应来触发。 (向前运动) (旋转) 7.纹理贴图过程 ①载入位图图像: AUX_RGBImageRec *LoadBMP(CHAR *Filename) //载入位图图象 {

8、 FILE *File=NULL; //文献句柄 if (!Filename) //保证文献名已提供 { return NULL; //假如没提供,返回 NULL } File=fopen(Filename,"r"); //尝试打开文献 if (File) //判断文献是否存在? { fclose(File);

9、 //关闭句柄 return auxDIBImageLoadA(Filename); //载入位图并返回指针 } return NULL; //假如载入失败,返回 NULL } ②位图转化成纹理: int LoadGLTextures() //载入位图(调用上面的代码)并转换成纹理 { int Status= FALSE; //状态指示器 AUX_RGBImageRec *TextureImage[2];

10、 //创建纹理的存储空间 memset(TextureImage,0,sizeof(void *)*1);//将指针设为 NULL //载入位图,检查有无错误,假如位图没找到则退出 if ((TextureImage[0]=LoadBMP("Data/wenli.bmp"))&&(TextureImage[1]=LoadBMP("Data/wenli2.bmp"))) { Status= TRUE; //将Status设为TRUE glGenTextures(2, &texture[0]);

11、 //创建纹理 for(int loop=0;loop<2;loop++) { glBindTexture(GL_TEXTURE_2D,texture[loop]);//绑定纹理 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);//设立滤波 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[l

12、oop]->sizeX, TextureImage[loop]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[loop]->data);//生成纹理 } } for (int loop=0; loop<2; loop++) { if (TextureImage[loop]!=NULL) //判断纹理是否存在 { if (TextureImage[loop]->data!=NULL) //纹理图像是否存在 { free(TextureImage[loop

13、]->data); //释放纹理图像占用内存 } free(TextureImage[loop]); //释放图像结构 } } return Status; //返回 Status } ③调用纹理 glBindTexture(GL_TEXTURE_2D, texture[0]); //选择纹理 glBegin(GL_QUADS); //开始绘制四边形 g

14、lTexCoord2f(1.0f, 0.0f); glVertex3f( 0.0f, 1.5f, 0.0f); // 纹理和四边形的右下 glTexCoord2f(1.0f, 1.0f); glVertex3f( 0.0f, 2.5f, 0.0f); // 纹理和四边形的右上 glTexCoord2f(0.0f, 1.0f); glVertex3f( 0.0f, 2.5f, 1.0f); // 纹理和四边形的左上 glTexCoord2f(0.0f, 0.0f); glVertex3f( 0.0f, 1.5f, 1.0f); // 纹理和四边形的左下 glEnd()

15、 模型解读 (1)创建纹理图像:OpenGL规定纹理的高度和宽度都必须是2的n次方大小,只有满足这个条件,这个纹理图片才是有效的。一旦获取了像素值,我们就可以将这些数据传给OpenGL,让OpenGL生成一个纹理贴图: ①glGenTextures(2, &texture[0]):创建纹理对象 ②glBindTexture(GL_TEXTURE_2D,texture[loop]):绑定纹理对象 ③glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[loop]->sizeX, TextureImage[loop]->sizeY, 0, GL_

16、RGB, GL_UNSIGNED_BYTE, TextureImage[loop]->data):将Pixels数组中的像素值传给当前绑定的纹理对象,于是便创建了纹理。glTexImage函数的参数分别是纹理的类型,纹理的等级,每个像素的字节数,纹理图像的宽度和高度,边框大小,像素数据的格式,像素值的数据类型,像素数据。 (2)纹理滤镜:在纹理映射的过程中,假如图元的大小不等于纹理的大小,OpenGL便会对纹理进行缩放以适应图元的尺寸。我们可以通过设立纹理滤镜来决定OpenGL对某个纹理采用的放大、缩小的算法。调用glTexParameter来设立纹理滤镜。如: glTexParamete

17、ri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);//设立放大滤镜 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);//设立缩小滤镜 (3)纹理坐标:要使用当前的纹理绘制图元,我们必须在绘制每个顶点之前为该顶点指定纹理坐标。只需调用glTexCoord2d(s:Double;t:Double);函数即可。其中,s、t是对于2D纹理而言的s、t坐标。对于任何纹理,无论纹理的真正大小如何,其顶端(左上角)的纹理坐标恒为(0,0),右下角的纹理坐标恒为(1,1)。也就是

18、说,纹理坐标应是一个介于0到1之间的一个小数。 纹理贴图前后对比效果见图5。 纹理贴图前 纹理贴图后 五、 成果展示 本次实验将两个模型进行改造,实现了一辆简朴的小车以及一艘简朴的帆船。 (小车模型) (帆船模型) 六、 心得体会 计算机图形学自身是一门理论与实践都比较复杂的学科,从最开始二维图形的实现,到最后三维真实感场景的实现,都不是一个简朴的过程,好的真实感场景实现需要多个模型的互相融合,在实验设计过程中,难免碰到困难,下面是本次实验总结出来的感受。 1. glEnable( )启动函数,无论是构造什么样

19、的模型,都需要由这个函数来启动,如光照模型需要glEnable(GL_LIGHTING),纹理贴图需要glEnable (GL_TEXTURE_2D);没有启动函数的作用,效果都是不也许是实现的。 2. glPushMatrix()和glPopMatrix()函数的使用,这两个函数在OpenGL中是模型视图矩阵堆栈,分别是压栈和出栈函数,防止坐标不稳定移动。拟定每个模型都绘制在预期的位置。 以本次实验中小车模型画车轮为例: 这个函数中使用了堆栈的函数,为了使轮胎往预期的方向移动,否则,轮胎移动的效果会变成规则的向不同地方跳动,显的不切合实际。 3.最后,个人感觉OpenG

20、L场景的实现最重要的是函数的调用以及流程控制运用。函数的重要性不言而喻。假如可以充足吸取模型中各类函数的用法,实现一个场景就不会那么困难,流程控制就是应当想好模型设计的顺序问题,顺序问题一旦解决,运用到程序中,思绪清楚就会便于成功。 七、源代码实例 1.小车模型: #include #include #include #include #include #include #include #pragma comment(

21、 lib, "opengl32.lib") #pragma comment( lib, "glu32.lib") #pragma comment( lib, "glaux.lib") float delta_v=0.0; float r=1.0,g=1.0,b=0.0; float r1=0.0,g1=0.0,b1=0.0; float P[16]; float M[16]; static GLfloat xRot = 0.0f; static GLfloat yRot = 0.0f; static float elbow = 0 ,z=0; /

22、/光线及材质的定义 GLfloat global_ambient[]={0.1,0.1,0.1,0.1}; //总体环境光设立 GLfloat light_ambient[]={0.0, 0.0, 0.0, 1.0}; //环境光,通常定义在光源中 GLfloat light_diffuse[]={1.0, 1.0, 1.0, 1.0}; //漫反射光(Diffuse Light) GLfloat light_specular[]={1.0, 1.0, 1.0, 1.0}; //和镜面反射光(Specular Light)。 GLfloat

23、light_position[]={20.0, 20.0, 20.0, 0.0}; //光源位置 GLfloat mat_specular1[]={1.0, 1.0, 1.0, 1.0}; //镜面反射光材质材质 GLfloat mat_diffuse1[]={1.0, 1.0, 1.0, 1.0}; //漫反射光材质 GLfloat mat_ambient1[]={1.0, 1.0, 1.0, 1.0}; //环境光材质 GLfloat mat_shininess1={10.0}; //镜面反射指数 G

24、Lfloat vertices[] [3] ={{-0.7,0,1},{0.7,0,1},{0.7,0,-1},{-0.7,0,-1},{-0.5,1,0.8},{0.5,1,0.8},{0.5,1,-0.8}, {-0.5,1,-0.8}}; GLfloat fogcolor[]={0.5f,0.7f,0.5f,1.0f}; GLuint texture[2]; //存储2个纹理 AUX_RGBImageRec *LoadBMP(CHAR *Filename) //载入位图图象 { FILE *File=NULL;

25、 //文献句柄 if (!Filename) //保证文献名已提供 { return NULL; //假如没提供,返回 NULL } File=fopen(Filename,"r"); //尝试打开文献 if (File) //判断文献是否存在? { fclose(File); //关闭句柄 retu

26、rn auxDIBImageLoadA(Filename); //载入位图并返回指针 } return NULL; //假如载入失败,返回 NULL } int LoadGLTextures() //载入位图(调用上面的代码)并转换成纹理 { int Status= FALSE; //状态指示器 AUX_RGBImageRec *TextureImage[2]; //创建纹理的存储空间 memset(Text

27、ureImage,0,sizeof(void *)*1);//将指针设为 NULL //载入位图,检查有无错误,假如位图没找到则退出 if ((TextureImage[0]=LoadBMP("Data/wenli.bmp"))&&(TextureImage[1]=LoadBMP("Data/wenli2.bmp"))) { Status= TRUE; //将Status设为TRUE glGenTextures(2, &texture[0]); //创建纹理 for(int loop

28、0;loop<2;loop++) { glBindTexture(GL_TEXTURE_2D,texture[loop]);//绑定纹理 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);//设立滤波模式 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[loop]->sizeX, TextureImage[l

29、oop]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[loop]->data);//生成纹理 } } for (int loop=0; loop<2; loop++) { if (TextureImage[loop]!=NULL) //判断纹理是否存在 { if (TextureImage[loop]->data!=NULL) //纹理图像是否存在 { free(TextureImage[loop]->data); //释放纹理图像占用内存

30、 } free(TextureImage[loop]); //释放图像结构 } } return Status; //返回 Status } void menu(int id) //设立一个右键菜单功能 { switch(id) { case (1): exit(0); break; } glutPostRedisplay(); } void color_car_body_menu(int id)//车身颜色变化菜单 {

31、 switch(id) { case(1): r=1.0;g=0.0;b=0.0; break; case(2): r=0.0;g=1.0;b=0.0; break; case(3): r=0.0;g=0.0;b=1.0; break; case(4): r=0.9;g=0.1;b=0.6; break; case(5): r=0.7;g=0.5;b=0.1; break; case(6):

32、 r=1.0;g=0.0;b=0.0; break; } glutPostRedisplay(); } void color_car_wheel_menu(int id)//车轮颜色变化菜单 { switch(id) { case(1): r1=0.0;g1=0.5;b1=1.0; break; case(2): r1=0.7;g1=0.8;b1=0.4; break; case(3): r1=0.7;g1=0.0;b1=0.0;

33、 break; case(4): r1=0.9;g1=0.1;b1=0.6; break; case(5): r1=0.7;g1=0.5;b1=0.1; break; case(6): r1=0.7;g1=1.0;b1=0.6; break; } glutPostRedisplay(); } //定义跑道 void runway() { glBegin(GL_QUADS); // GL_QUADS:绘制由四个顶

34、点组成的一组单独的四边形。 //顶点4n-3、4n-2、4n-1和4n定义了第n个四边形。总共绘制N/4个四边形 glColor3f(0.0f,0.8f,0.0f); //设定跑到颜色 glVertex3f(-3.0f, -0.3f, 100.0f); //设定跑道坐标 glColor3f(0.0f,0.8f,0.0f); glVertex3f( -0.8f, -0.3f, 100.0f); glColor3f(0.0f,0.8f,0.0f);

35、 glVertex3f( -0.8f,-0.3f, -100.0f); glColor3f(0.0f,0.8f,0.0f); glVertex3f(-3.0f,-0.3f, -100.0f); glEnd(); glBegin(GL_QUADS); glColor3f(0.0f,0.8f,0.0f); glVertex3f(0.8f, -0.3f, 100.0f); glColor3f(0.0f,0.8f,0.0f); glVertex3f( 3.0f, -0.3f

36、 100.0f); glColor3f(0.0f,0.8f,0.0f); glVertex3f( 3.0f,-0.3f, -100.0f); glColor3f(0.0f,0.8f,0.0f); glVertex3f(0.8f,-0.3f, -100.0f); glEnd(); glBegin(GL_QUADS); //跑道样式 glColor3f(0.9f,1.0f,0.9f); //跑道颜色 glVertex3f(-0.8f,-0.3f, 100.

37、0f); //跑道坐标 glColor3f(0.9f,1.0f,0.9f); glVertex3f( 0.8f, -0.3f, 100.0f); glColor3f(0.9f,1.0f,0.9f); glVertex3f( 0.8f,-0.3f, -100.0f); glColor3f(0.9f,1.0f,0.9f); glVertex3f(-0.8f,-0.3f, -100.0f); glEnd(); } //画车身 void quad(int a,int b, int c, int d)

38、{ glBegin(GL_QUADS); //GL_QUADS:绘制由四个顶点组成的一组单独的四边形。顶点4n-3、4n-2、4n-1和4n定义了第n个四边形。总共绘制N/4个四边形 glVertex3fv(vertices[a]); glVertex3fv(vertices[b]); glVertex3fv(vertices[c]); glVertex3fv(vertices[d]); glEnd(); } void car_body() { glColor3f(1.0,0.

39、0,0.0); //颜色模型函数 glColor3f(r,g,b); //设定初始颜色 glNormal3f(0.0f, -1.0f, 0.0f); //buttom,设立当前法线数组 ,指定新的当前法线的x, y, z坐标。各个定点的法向量不同,所以在拟定顶点之前拟定法向量。 quad(0,1,2,3); glNormal3f(1.0f, 0.0f, 0.0f); //right quad(1,2,6,5); glNormal3f(0.0f, 0.0f, -1.0f); //back quad(2,3,7,6);

40、 glNormal3f(-1.0f, 0.0f, 0.0f); //left quad(7,3,0,4); glNormal3f(0.0f, 0.0f, 1.0f); //front quad(0,1,5,4); glNormal3f(0.0f, 1.0f, 0.0f); //top quad(4,5,6,7); glBindTexture(GL_TEXTURE_2D, texture[0]); //选择纹理 glBegin(GL_QUADS); //右面 glTexCoord2f(1.0f, 0.0f); glVe

41、rtex3f( 0.0f, 1.5f, 0.0f); //纹理和四边形的右下 glTexCoord2f(1.0f, 1.0f); glVertex3f( 0.0f, 2.5f, 0.0f); //纹理和四边形的右上 glTexCoord2f(0.0f, 1.0f); glVertex3f( 0.0f, 2.5f, 1.0f);//纹理和四边形的左上 glTexCoord2f(0.0f, 0.0f); glVertex3f( 0.0f, 1.5f, 1.0f); //纹理和四边形的左下 glEnd(); glBindTextur

42、e(GL_TEXTURE_2D, texture[1]); // 选择纹理 glBegin(GL_QUADS); // 左面 glTexCoord2f(0.0f, 0.0f); glVertex3f(-0.0f, 1.5f, 0.0f); // 纹理和四边形的左下 glTexCoord2f(1.0f, 0.0f); glVertex3f(-0.0f, 1.5f, 1.0f); // 纹理和四边形的右下 glTexCoord2f(1.0f, 1.0f); glVertex3f(-0.0f, 2.5f, 1.0f); //

43、 纹理和四边形的右上 glTexCoord2f(0.0f, 1.0f); glVertex3f(-0.0f, 2.5f, 0.0f); // 纹理和四边形的左上 glEnd(); glPopMatrix(); glPushMatrix(); glTranslatef (delta_v,0.0,z); glRotatef ((GLfloat) delta_v, 0.0, 1.0, 0.0); glTranslatef (0.0, 1.55, 0.0);

44、 glColor3f(0.5,0.8,0.2); glPushMatrix(); glScalef (0.05,1.9,0.05); glutSolidCube(1.0); glPopMatrix(); glPopMatrix(); } //画车轮 void car_wheel() { GLUquadricObj *quadratic; glColor3f(0.0,0.1,0.1); glColor3f(r1,g1,b1); g

45、lPushMatrix(); //压栈 //模型视图矩阵堆栈,OpenGL提供了相应的接口:glPushMatirx()和glPopMatrix() //压栈和堆栈,防止坐标不稳定移动。拟定每个模型都绘制在预期的位置, quadratic=gluNewQuadric(); //创建二次曲面对象。gluNewQuadric glTranslatef(0.2,0,0.7); //表达将当前图形向x轴平移0.2,向y轴平移0,向z

46、轴平移0.7 ,表达物体在这个坐标的时候开始绘制 glRotatef(90.0,0,1.0,0); //沿着(90,0,0)方向向量逆时针旋转90° glTranslatef(-0.2,0,-0.7); gluCylinder(quadratic,0.25f,0.25f,0.2f,32,32); //画圆柱体(轮胎)这是绘制柱面的函数 glTranslatef(0.0,0,0.8); gluCylinder(quadratic,0.25f,0.25f,0.2f,32,32); glTranslatef(2.0,0,

47、0.8); gluCylinder(quadratic,0.25f,0.25f,0.2f,32,32); glTranslatef(0,0,0.8); gluCylinder(quadratic,0.25f,0.25f,0.2f,32,32); glPopMatrix();//出栈 } void car() { car_body(); car_wheel(); LoadGLTextures(); } void mydisplay() { glClear(

48、GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //清除颜色缓存 glLightModelfv(GL_LIGHT_MODEL_AMBIENT,global_ambient); // 总体光源 glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular1); //指定镜面反射光的材质属性 glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient1); //指定环境反射光的材质属性 glMaterialfv(GL_

49、FRONT, GL_DIFFUSE, mat_diffuse1); //指定漫反射光的材质属性 glMaterialf(GL_FRONT, GL_SHININESS, mat_shininess1); //设立镜面反射指数 //glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); glGetFloatv(GL_MODELVIEW_MATRIX, P); //矩阵视图,得到模型移动之后的坐标。。不太拟定 glPushMatrix(); glLoad

50、Matrixf(M); //把当前矩阵的16个值设立为m指定的值 runway(); glPopMatrix(); glLoadMatrixf(P); //把当前矩阵的16个值设立为m指定的值 car(); glutSwapBuffers(); //glutSwapBuffers函数是OpenGL中G

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服