版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机图形学第二次作业姓名:学号:学院:任课教师:设计要求试设计一个室内三维环境,并利用OPENGL展示它得三维效果。要求:包含基本得实体元素:球,多面体,椎体,柱体,曲面等;有全局光照与纹理功能程序具有交互功能二.交互说明键盘得4个按键:上键:视角上移下键:视角下移左键:视角左移右键:视角右移效果展示程序代码#include<stdlib、h>#include<stdio、h>#include"glew、h"#include"glut、h"#include<windows、h>#pragmament(lib,"glew32、lib")#definecheckImageWidth64#definecheckImageHeight64staticGLubytecheckImage[checkImageHeight][checkImageWidth][4];staticGLuinttexName;staticGLfloatxrot=0;staticGLfloatyrot=0;//函数功能:绘制地面纹理图案voidmakeCheckImage(void){ inti,j,c; for(i=0;i<checkImageHeight;i++){ for(j=0;j<checkImageWidth;j++){ c=((((i&0x16)==0)^((j&0x16))==0))*255; checkImage[i][j][0]=(GLubyte)c; checkImage[i][j][1]=(GLubyte)c; checkImage[i][j][2]=(GLubyte)c; checkImage[i][j][3]=(GLubyte)255; } }}//函数功能:初始化voidSetupRC(void){ glEnable(GL_LIGHTING); //启用灯源 glEnable(GL_LIGHT0); //启用0号灯 glShadeModel(GL_SMOOTH);//设置光滑着色模式 glEnable(GL_DEPTH_TEST); //启用深度测试 glEnable(GL_NORMALIZE); //启用法向量 glClearColor(1、0f,1、0f,1、0f,0、0f);//为色彩缓冲区指定用于清除得值 //设置表面材料得属性 GLfloatmat_ambient[]={0、6f,0、6f,0、6f,1、0f}; GLfloatmat_diffuse[]={0、5f,0、5f,0、5f,1、0f}; GLfloatmat_specular[]={1、0f,1、0f,1、0f,1、0f,}; GLfloatmat_shininess[]={40、0f}; glMaterialfv(GL_FRONT,GL_AMBIENT,mat_ambient); //指定环境泛光得强度glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse); //漫反射得强度 glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular); //镜面反射得强度 glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess); //镜面反射光得会聚强度 //纹理 makeCheckImage; //绘制地面纹理图案 glPixelStorei(GL_UNPACK_ALIGNMENT,1); //控制像素存储模式 glGenTextures(1,&texName); //用来生成纹理得数量为1 glBindTexture(GL_TEXTURE_2D,texName); //绑定纹理 //纹理滤波,图象从纹理图象空间映射到帧缓冲图象空间 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,checkImageWidth, checkImageHeight,0,GL_RGBA,GL_UNSIGNED_BYTE,checkImage);}//函数功能:绘制墙壁voidDrawWall(void){ glPushMatrix;//矩阵堆栈压入 glTranslated(1、2,0、01,1、2);//将变换矩阵与当前矩阵相乘,使原点移动到(参数值坐标) glScaled(2、4,0、02,2、4);//将比例矩阵与当前矩阵相乘,将当前图形沿x,y,z轴分别放大为原来得(参数值)倍 glutSolidCube(1、0);//size=1、0得实心立方体 glPopMatrix;//矩阵堆栈弹出}//函数功能:绘制立方柱体voidDrawPillar(void){ glPushMatrix; glTranslated(0,0、15,0); glScaled(0、02,0、3,0、02); glutSolidCube(1、0); glPopMatrix;}//函数功能:绘制桌子voidDrawTable(void){ glPushMatrix; glTranslated(0、05,0、3,0、05); glScaled(0、6,0、02,0、6); glutSolidCube(1、0); //绘制桌面 glPopMatrix; glPushMatrix; glTranslated(0、275,0,0、275); DrawPillar; //绘制桌腿 glTranslated(0,0,0、45); DrawPillar; //绘制桌腿 glTranslated(0、45,0,0、45); DrawPillar; //绘制桌腿 glTranslated(0,0,0、45); DrawPillar; //绘制桌腿 glPopMatrix;}//函数功能:绘图voidRenderScene(void){ GLfloatlight_position[]={2、0f,6、0f,3、0f,0、0f}; glLightfv(GL_LIGHT0,GL_POSITION,light_position);//指定0号光源得位置 glMatrixMode(GL_PROJECTION);//对投影矩阵应用随后得矩阵操作 glLoadIdentity; //将当前得用户坐标系得原点移到了屏幕中心GLfloath=1、0; //窗口得一半高度 glOrtho(h*64/48、0,h*64/48、0,h,h,0、1,100、0);//将当前得可视空间设置为正投影空间:左,右,下,上,近,远。 glMatrixMode(GL_MODELVIEW); //对模型视景矩阵堆栈应用随后得矩阵操作glLoadIdentity; gluLookAt(2,1、6,2,0,0、2,0,0,1,0); //设置观察坐标系//开始绘制 glRotatef(xrot,1、0f,0、0f,0、0f); //旋转轴经过原点,方向为(1,0,0),旋转角度为xrot,方向满足右手定则 glRotatef(yrot,0、0f,1、0f,0、0f);//旋转轴经过原点,方向为(0,1,0),旋转角度为yrotglClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glPushMatrix; glRotated(90、0,0、0,0、0,1、0); DrawWall; //绘制一面墙壁glPopMatrix; glPushMatrix; glRotated(90、0,1、0,0、0,0、0); DrawWall; //绘制另一面墙壁 glPopMatrix; glPushMatrix; glTranslated(0、4,0,0、4); DrawTable; //绘制桌子 glPopMatrix; glPushMatrix; glTranslated(0、2,0、1,0、85); glScaled(0、8,0、8,1、0); glutSolidCube(0、2); //绘制箱子 glPopMatrix; glPushMatrix; glTranslated(0、6,0、38,0、6); glRotated(100,0,1,0); glutSolidTeapot(0、1); //绘制茶壶 glPopMatrix; glPushMatrix; glTranslated(0、3,0、33,0、5); glRotated(180,0,180,180); glutSolidTorus(0、02f,0、05,25,50);//绘制手镯【丝状花环】 glPopMatrix; glPushMatrix; glTranslated(0、45,0、42,0、3); glutSolidSphere(0、1,15,50); //绘制球体 glPopMatrix; glPushMatrix; glTranslated(1、0,0、35,0、3); glScaled(0、03,0、7,0、03); glutSolidCube(1、0); //绘制灯柱 glPopMatrix; glPushMatrix; glTranslated(1、0,0、7,0、3); glRotated(190,180,200,270); glutSolidCone(0、15,0、25f,30,25); //绘制圆锥型灯罩 glPopMatrix; //绘制纹理 glEnable(GL_TEXTURE_2D); //开启纹理 glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_DECAL);//映射方式 glBegin(GL_QUADS); //绘制地面 //绘制四边形并给出当前顶点所对应得纹理坐标 glTexCoord2f(0、0,0、0);glVertex3f(0、0,0、0,0、0); glTexCoord2f(0、0,1、0);glVertex3f(0、0,0、0,2、4); glTexCoord2f(1、0,1、0);glVertex3f(2、4,0、0,2、4); glTexCoord2f(1、0,0、0);glVertex3f(2、4,0、0,0、0); glEnd; glDisable(GL_TEXTURE_2D); //关闭纹理 glFlush; //绘图结果显示到屏幕上}//函数功能:处理按键交互信息voidSpecialKeys(intkey,intx,inty){ switch(key){ caseGLUT_KEY_UP: //上键 xrot+=1、0; break; caseGLUT_KEY_DOWN: //下键 xrot=1、0; break; caseGLUT_KEY_LEFT: //左键 yrot+=1、0; break; caseGLUT_KEY_RIGHT: //右键 yrot=1、0; break; default: break; } glutPostRedisplay; //标记当前窗口需要重新绘制 glFlush; //绘图结果显示到屏幕上}//函数功能:改变窗口大小voidChangeSize(intw,inth){ GLfloatlightPos[]={50、f,50、0f,100、0f,1、0f}; GLfloatnRange=1、9f; if(h==0) h=1; glViewport(0,0,w,h); //重新设置屏幕上得窗口大小 glMatrixMode(GL_PROJECTION);//后继操作都在投影变换范围内 glLoadIdentity; //设置当前矩阵为单位矩阵 //正交投影 if(w<=h) glOrtho(nRange,nRange,nRange*h/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026山东青岛市教育局直属学校招聘教师100人备考题库含答案详解(研优卷)
- 2026江西寻乌县公安局招聘留置看护队员3人备考题库附答案详解(黄金题型)
- 小学信息科技川教版(新教材)四年级下册每课教学反思
- 2026安徽芜湖市人才发展集团代招聘7人备考题库(三)附答案详解(夺分金卷)
- 2026江苏南京中医药大学招聘1人备考题库含答案详解(培优a卷)
- 2026重庆市万州区余家镇人民政府招聘非全日制公益性岗位8人备考题库及一套完整答案详解
- 2026宁麓置地(宁波)有限公司招聘7人备考题库及答案详解(基础+提升)
- 2026天津滨海美都嘉宾轩投资管理有限责任公司社会招聘总经理的1人备考题库附答案详解(b卷)
- 2026江苏盐城市大丰区疾病预防控制中心招聘劳务派遣1人备考题库及答案详解(有一套)
- 2026福建福州新区(长乐区)卫健教育系统招聘医学类专业人员60人备考题库含答案详解(模拟题)
- GA 1817.1-2026学校反恐怖防范要求第1部分:普通高等学校
- 2026云南临沧市文化旅游产业发展集团有限公司招聘26人笔试备考试题及答案解析
- (2026年课件合集)人教版二年级数学下册全册教案(教学设计)
- 2025年体育教师专业知识考试试题及答案
- 自治区审读工作制度
- 2026湖南省博物馆编外工作人员公开招聘笔试模拟试题及答案解析
- DB44-T 2814-2026 城镇燃气用户端设施安全技术标准
- 球罐不开罐检验方法及其相互验证
- GB/T 33365-2016钢筋混凝土用钢筋焊接网试验方法
- GB/T 27476.3-2014检测实验室安全第3部分:机械因素
- GB/T 17466.1-2008家用和类似用途固定式电气装置电器附件安装盒和外壳第1部分:通用要求
评论
0/150
提交评论