OpenGL室内三维环境北邮计算机图形学作业Word文件下载.docx

上传人:b****2 文档编号:4347064 上传时间:2023-05-03 格式:DOCX 页数:12 大小:98.78KB
下载 相关 举报
OpenGL室内三维环境北邮计算机图形学作业Word文件下载.docx_第1页
第1页 / 共12页
OpenGL室内三维环境北邮计算机图形学作业Word文件下载.docx_第2页
第2页 / 共12页
OpenGL室内三维环境北邮计算机图形学作业Word文件下载.docx_第3页
第3页 / 共12页
OpenGL室内三维环境北邮计算机图形学作业Word文件下载.docx_第4页
第4页 / 共12页
OpenGL室内三维环境北邮计算机图形学作业Word文件下载.docx_第5页
第5页 / 共12页
OpenGL室内三维环境北邮计算机图形学作业Word文件下载.docx_第6页
第6页 / 共12页
OpenGL室内三维环境北邮计算机图形学作业Word文件下载.docx_第7页
第7页 / 共12页
OpenGL室内三维环境北邮计算机图形学作业Word文件下载.docx_第8页
第8页 / 共12页
OpenGL室内三维环境北邮计算机图形学作业Word文件下载.docx_第9页
第9页 / 共12页
OpenGL室内三维环境北邮计算机图形学作业Word文件下载.docx_第10页
第10页 / 共12页
OpenGL室内三维环境北邮计算机图形学作业Word文件下载.docx_第11页
第11页 / 共12页
OpenGL室内三维环境北邮计算机图形学作业Word文件下载.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

OpenGL室内三维环境北邮计算机图形学作业Word文件下载.docx

《OpenGL室内三维环境北邮计算机图形学作业Word文件下载.docx》由会员分享,可在线阅读,更多相关《OpenGL室内三维环境北邮计算机图形学作业Word文件下载.docx(12页珍藏版)》请在冰点文库上搜索。

OpenGL室内三维环境北邮计算机图形学作业Word文件下载.docx

右键:

视角右移

三.效果展示

四.程序代码

#include<

>

#include"

"

#pragmacomment(lib,"

#definecheckImageWidth64

#definecheckImageHeight64

staticGLubytecheckImage[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,,,;

//为色彩缓冲区指定用于清除的值

//设置表面材料的属性

GLfloatmat_ambient[]={,,,};

GLfloatmat_diffuse[]={,,,};

GLfloatmat_specular[]={,,,,};

GLfloatmat_shininess[]={};

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,,;

//将变换矩阵与当前矩阵相乘,使原点移动到(参数值坐标)

glScaled,,;

//将比例矩阵与当前矩阵相乘,将当前图形沿x,y,z轴分别放大为原来的(参数值)倍

glutSolidCube;

//size=的实心立方体

glPopMatrix();

//矩阵堆栈弹出

绘制立方柱体

voidDrawPillar(void)

glTranslated(0,,0);

绘制桌子

voidDrawTable(void)

//绘制桌面

glTranslated,0,;

DrawPillar();

//绘制桌腿

glTranslated(0,0,;

绘图

voidRenderScene(void)

GLfloatlight_position[]={,,,};

glLightfv(GL_LIGHT0,GL_POSITION,light_position);

//指定0号光源的位置

glMatrixMode(GL_PROJECTION);

//对投影矩阵应用随后的矩阵操作

glLoadIdentity();

//将当前的用户坐标系的原点移到了屏幕中心

GLfloath=;

//窗口的一半高度

glOrtho(-h*64/,h*64/,-h,h,,;

//将当前的可视空间设置为正投影空间:

左,右,下,上,近,远。

glMatrixMode(GL_MODELVIEW);

//对模型视景矩阵堆栈应用随后的矩阵操作

gluLookAt(2,,2,0,,0,0,1,0);

//设置观察坐标系

//开始绘制

glRotatef(xrot,,,;

//旋转轴经过原点,方向为(1,0,0),旋转角度为xrot,方向满足右手定则

glRotatef(yrot,,,;

//旋转轴经过原点,方向为(0,1,0),旋转角度为yrot

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

glRotated,,,;

DrawWall();

//绘制一面墙壁

//绘制另一面墙壁

DrawTable();

//绘制桌子

//绘制箱子

glRotated(-100,0,1,0);

glutSolidTeapot;

//绘制茶壶

glRotated(180,0,180,180);

glutSolidTorus,,25,50);

//绘制手镯【丝状花环】

glutSolidSphere,15,50);

//绘制球体

//绘制灯柱

glRotated(190,180,200,270);

glutSolidCone,,30,25);

//绘制圆锥型灯罩

//绘制纹理

glEnable(GL_TEXTURE_2D);

//开启纹理

glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_DECAL);

//映射方式

glBegin(GL_QUADS);

//绘制地面

//绘制四边形并给出当前顶点所对应的纹理坐标

glTexCoord2f,;

glVertex3f,,;

glEnd();

glDisable(GL_TEXTURE_2D);

//关闭纹理

glFlush();

//绘图结果显示到屏幕上

处理按键交互信息

voidSpecialKeys(intkey,intx,inty)

switch(key){

caseGLUT_KEY_UP:

//上键

xrot+=;

break;

caseGLUT_KEY_DOWN:

//下键

xrot-=;

caseGLUT_KEY_LEFT:

//左键

yrot+=;

caseGLUT_KEY_RIGHT:

//右键

yrot-=;

default:

glutPostRedisplay();

//标记当前窗口需要重新绘制

改变窗口大小

voidChangeSize(intw,inth)

GLfloatlightPos[]={,,,};

GLfloatnRange=;

if(h==0)

h=1;

glViewport(0,0,w,h);

//重新设置屏幕上的窗口大小

//后继操作都在投影变换范围内

//设置当前矩阵为单位矩阵

//正交投影

if(w<

=h)

glOrtho(-nRange,nRange,-nRange*h/w,nRange*h/w,-nRange,nRange);

else

glOrtho(-nRange*w/h,nRange*w/h,-nRange,nRange,-nRange,nRange);

//选择模型观察矩阵

//设置当前矩阵为单位矩阵

glLightfv(GL_LIGHT0,GL_POSITION,lightPos);

//重新定义光源

voidmain()

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH);

//双缓存

glutInitWindowSize(600,400);

//窗口大小

glutInitWindowPosition(300,100);

//窗口位置

glutCreateWindow("

xdyroom"

);

//创建窗口,名为xdyroom

SetupRC();

//自定义的初始化函数

glutDisplayFunc(RenderScene);

//显示回调函数,用于绘图

glutReshapeFunc(ChangeSize);

//处理改变窗口大小

glutSpecialFunc(SpecialKeys);

//处理按键交互信息

glutMainLoop();

//让GLUT框架开始运行,处理交互事件

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2