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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

OpenGL室内三维环境北邮计算机图形学作业.docx

1、OpenGL室内三维环境北邮计算机图形学作业 计算机图形学第二次作业 姓 名: 学号: 学 院: 任课教师: 一 设计要求试设计一个室内三维环境,并利用OPEN GL展示它的三维效果。要求:(1) 包含基本的实体元素:球,多面体,椎体,柱体,曲面等;(2) 有全局光照和纹理功能(3) 程序具有交互功能二交互说明键盘的4个按键:上键:视角上移下键:视角下移左键:视角左移右键:视角右移三 效果展示四 程序代码#include #include #include #include #include #pragma comment (lib, )#define checkImageWidth 64#d

2、efine checkImageHeight 64static GLubyte checkImagecheckImageHeightcheckImageWidth4;static GLuint texName;static GLfloat xrot=0;static GLfloat yrot=0;/函数功能:绘制地面纹理图案void makeCheckImage(void) int i, j, c; for (i = 0; i checkImageHeight; i+) for (j = 0; j checkImageWidth; j+) c = (i&0x16)=0)(j&0x16)=0)*

3、255; checkImageij0 = (GLubyte) c; checkImageij1 = (GLubyte) c; checkImageij2 = (GLubyte) c; checkImageij3 = (GLubyte) 255; /函数功能:初始化void SetupRC(void) glEnable(GL_LIGHTING); /启用灯源 glEnable(GL_LIGHT0); /启用0号灯 glShadeModel(GL_SMOOTH); /设置光滑着色模式 glEnable(GL_DEPTH_TEST); /启用深度测试 glEnable(GL_NORMALIZE);

4、/启用法向量 glClearColor, , , ; /为色彩缓冲区指定用于清除的值 /设置表面材料的属性 GLfloat mat_ambient = ,; GLfloat mat_diffuse = ,; GLfloat mat_specular = ,; GLfloat mat_shininess = ; glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); /指定环境泛光的强度 glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); /漫反射的强度 glMaterialfv(GL_FRONT, GL_S

5、PECULAR, mat_specular); /镜面反射的强度 glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); /镜面反射光的会聚强度 /纹理 makeCheckImage(); /绘制地面纹理图案 glPixelStorei(GL_UNPACK_ALIGNMENT, 1); /控制像素存储模式 glGenTextures(1, &texName); /用来生成纹理的数量为1 glBindTexture(GL_TEXTURE_2D, texName); /绑定纹理 /纹理滤波,图象从纹理图象空间映射到帧缓冲图象空间 glTexPara

6、meteri(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, checkImageW

7、idth, checkImageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, checkImage);/函数功能:绘制墙壁void DrawWall(void) glPushMatrix(); /矩阵堆栈压入 glTranslated, , ; /将变换矩阵与当前矩阵相乘,使原点移动到(参数值坐标) glScaled, , ; /将比例矩阵与当前矩阵相乘,将当前图形沿x,y,z轴分别放大为原来的(参数值)倍 glutSolidCube; /size=的实心立方体 glPopMatrix(); /矩阵堆栈弹出/函数功能:绘制立方柱体void DrawPillar(v

8、oid) glPushMatrix(); glTranslated(0, , 0); glScaled, , ; glutSolidCube; glPopMatrix();/函数功能:绘制桌子void DrawTable(void) glPushMatrix(); glTranslated, , ; glScaled, , ; glutSolidCube; /绘制桌面 glPopMatrix(); glPushMatrix(); glTranslated, 0, ; DrawPillar(); /绘制桌腿 glTranslated(0, 0, ; DrawPillar(); /绘制桌腿 glT

9、ranslated, 0, ; DrawPillar(); /绘制桌腿 glTranslated(0, 0, ; DrawPillar(); /绘制桌腿 glPopMatrix();/函数功能:绘图void RenderScene(void) GLfloat light_position=, , , ; glLightfv(GL_LIGHT0,GL_POSITION,light_position); /指定0号光源的位置 glMatrixMode(GL_PROJECTION); /对投影矩阵应用随后的矩阵操作 glLoadIdentity(); /将当前的用户坐标系的原点移到了屏幕中心 GLf

10、loat h = ; /窗口的一半高度 glOrtho(-h*64/, h*64/, -h, h, , ; /将当前的可视空间设置为正投影空间:左,右,下,上,近,远。 glMatrixMode(GL_MODELVIEW); /对模型视景矩阵堆栈应用随后的矩阵操作 glLoadIdentity(); gluLookAt(2, , 2, 0, , 0, 0, 1, 0); /设置观察坐标系 /开始绘制 glRotatef(xrot, , , ; /旋转轴经过原点,方向为(1,0,0),旋转角度为xrot,方向满足右手定则 glRotatef(yrot, , , ; /旋转轴经过原点,方向为(0,

11、1,0),旋转角度为yrot glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glRotated, , , ; DrawWall(); /绘制一面墙壁 glPopMatrix(); glPushMatrix(); glRotated, , , ; DrawWall(); /绘制另一面墙壁 glPopMatrix(); glPushMatrix(); glTranslated, 0, ; DrawTable(); /绘制桌子 glPopMatrix(); glPushMatrix(); glTranslate

12、d, , ; glScaled, , ; glutSolidCube; /绘制箱子 glPopMatrix(); glPushMatrix(); glTranslated, , ; glRotated(-100, 0, 1, 0); glutSolidTeapot; /绘制茶壶 glPopMatrix(); glPushMatrix(); glTranslated, , ; glRotated(180, 0, 180, 180); glutSolidTorus, , 25, 50);/绘制手镯 【丝状花环】 glPopMatrix(); glPushMatrix(); glTranslated

13、, , ; glutSolidSphere, 15, 50); /绘制球体 glPopMatrix(); glPushMatrix(); glTranslated, , ; glScaled, , ; glutSolidCube; /绘制灯柱 glPopMatrix(); glPushMatrix(); glTranslated, , ; glRotated(190, 180, 200, 270); glutSolidCone, , 30, 25); /绘制圆锥型灯罩 glPopMatrix(); /绘制纹理 glEnable(GL_TEXTURE_2D); /开启纹理 glTexEnvf(G

14、L_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);/映射方式 glBegin(GL_QUADS); /绘制地面 /绘制四边形并给出当前顶点所对应的纹理坐标 glTexCoord2f, ; glVertex3f, , ; glTexCoord2f, ; glVertex3f, , ; glTexCoord2f, ; glVertex3f, , ; glTexCoord2f, ; glVertex3f, , ; glEnd(); glDisable(GL_TEXTURE_2D); /关闭纹理 glFlush(); /绘图结果显示到屏幕上/函数功能:处理按键

15、交互信息void SpecialKeys(int key, int x, int y) switch (key) case GLUT_KEY_UP: /上键 xrot += ; break; case GLUT_KEY_DOWN: /下键 xrot -= ; break; case GLUT_KEY_LEFT: /左键 yrot += ; break; case GLUT_KEY_RIGHT: /右键 yrot -= ; break; default: break; glutPostRedisplay(); /标记当前窗口需要重新绘制 glFlush(); /绘图结果显示到屏幕上/函数功能:改

16、变窗口大小void ChangeSize(int w, int h) GLfloat lightPos = , , , ; GLfloat nRange = ; if (h = 0) h = 1; glViewport(0, 0, w, h); /重新设置屏幕上的窗口大小 glMatrixMode(GL_PROJECTION);/后继操作都在投影变换范围内 glLoadIdentity(); /设置当前矩阵为单位矩阵 /正交投影 if (w = h) glOrtho (-nRange, nRange, -nRange*h/w, nRange*h/w, -nRange, nRange); els

17、e glOrtho (-nRange*w/h, nRange*w/h, -nRange, nRange, -nRange, nRange); glMatrixMode(GL_MODELVIEW); /选择模型观察矩阵 glLoadIdentity(); /设置当前矩阵为单位矩阵 glLightfv(GL_LIGHT0, GL_POSITION, lightPos);/重新定义光源void main () glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); /双缓存 glutInitWindowSize(600, 400); /窗口大小 glutInitWindowPosition(300, 100); /窗口位置 glutCreateWindow(xdy room); /创建窗口,名为xdy room SetupRC(); /自定义的初始化函数 glutDisplayFunc(RenderScene); /显示回调函数,用于绘图 glutReshapeFunc(ChangeSize); /处理改变窗口大小 glutSpecialFunc(SpecialKeys); /处理按键交互信息 glutMainLoop(); /让GLUT框架开始运行, 处理交互事件

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

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