图形学场景设计说明文档格式.docx
- 文档编号:15164913
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:14
- 大小:557.90KB
图形学场景设计说明文档格式.docx
《图形学场景设计说明文档格式.docx》由会员分享,可在线阅读,更多相关《图形学场景设计说明文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
2总体设计
2.1功能简介
创建一个900*600的Windows窗口,在窗口中显示冰箱、电灯、茶壶三个实体,根据电灯位置在地面上绘制个实体的投影;
为茶壶添加纹理;
利用键盘的方向键控制冰箱旋转,实现场景漫游
2.2功能模块图
2.3软件各模块功能介绍
2.3.1冰箱和茶壶的绘制
由四边形拼接出冰箱,通过平移旋转函数放置到指定位置,同时实现茶壶的绘制,在茶壶上添加纹理效果,通过平移旋转变换放置到冰箱上面
2.3.2顶灯的绘制
绘制出一个带灯罩的电灯,并且将光源放置在灯泡的位置
2.3.3设置光照
设置光照的各种参数,为场景添加光照效果,让实体具有立体效果
2.3.4纹理图片生成
用数组存储一幅自己设计的纹理图片,方便实体添加纹理效果时的调用
2.3.5影子生成
根据需求为场景中的实体添加阴影效果,使得场景效果更加逼真
2.3.6法向量设置
为场景设置法向量,确保实体在不同的角度都能被看到
3详细设计及关键代码
3.1光照模块详细设计
3.1.1光照设置功能
3.1.2光照设置设计
1>
设置光照的初值包括:
环境光照强度、漫反射光照强度、镜面反射光照强度、光源位置
2>
在实体绘制函数中开启光照效果
3.1.3具体代码实现
GLfloatambientLight[]={0.3f,0.3f,1.3f,1.0f};
GLfloatdiffuseLight[]={0.7f,0.7f,0.7f,1.0f};
GLfloatspecular[]={1.0f,1.0f,1.0f,1.0f};
GLfloatlightPos[]={346.0f,400.0f,-20.0f,0.0f};
GLfloatspecref[]={1.0f,1.0f,1.0f,1.0f};
voidlight(void)//光照函数
{
GLfloatpoints[3][3]={{-30.0f,-149.0f,-400.0f},
{-30.0f,-149.0f,-420.0f},
{40.0f,-149.0f,-420.0f}};
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
glFrontFace(GL_CCW);
//Counterclock-wisepolygonsfaceout
glEnable(GL_CULL_FACE);
glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT,ambientLight);
glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,diffuseLight);
glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,specular);
glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,75);
glLightfv(GL_LIGHT0,GL_AMBIENT,ambientLight);
glLightfv(GL_LIGHT0,GL_DIFFUSE,diffuseLight);
glLightfv(GL_LIGHT0,GL_SPECULAR,specular);
glLightfv(GL_LIGHT0,GL_POSITION,lightPos);
glEnable(GL_LIGHT0);
glEnable(GL_COLOR_MATERIAL);
glColorMaterial(GL_FRONT,GL_AMBIENT_AND_DIFFUSE);
glMaterialfv(GL_FRONT,GL_SPECULAR,specref);
glMateriali(GL_FRONT,GL_SHININESS,128);
glClearColor(0.4f,0.3f,0.6f,1.0f);
glDepthFunc(GL_LESS);
glEnable(GL_AUTO_NORMAL);
glEnable(GL_NORMALIZE);
glFrontFace(GL_CW);
}
3.1.4光照设置限制条件
光源位置设置必须在预先设置好的空间中
3.2纹理模块设置
3.2.1纹理设置模块功能
用数组存储一幅自己设计的纹理图片,通过设置对应坐标在指定的实体上添加纹理效果
3.2.2纹理添加模块设计
1>
.利用三维数组存储纹理图片中每个点的颜色值,在给实体添加纹理时调用纹理图片生成函数,将三维数组中存储的纹理图案添加到实体上
2>
.从文件中读取一图片,按照需要将纹理图片添加到对应的实体上
3.2.3纹理添加模块数据结构描述
.所用数据结构为一个三维数组,用于存储纹理图片的每点颜色值
2>
.文件存储纹理图片
3.2.4纹理添加模块具体实现代码
1>
.纹理图片自己绘制
voidGet_Mandeldrot_image(void)//生成纹理图片
{
doublemin_a,max_a,min_b,max_b,step_a,step_b,a,b;
intn=64,x,y,k,t;
//n=180foraJuliaset
floatscale=255.0/n,width=300,height=400;
for(x=0;
x<
width;
x++)
{
//b=min_b;
for(y=0;
y<
height;
y++)
{k=(x/80+2)%2;
t=(y/50+2)%2;
if(t==0&
&
k==0)
{
Mandelbrot_image[x][y][0]=255;
Mandelbrot_image[x][y][1]=255;
Mandelbrot_image[x][y][2]=0;
}
else
{
Mandelbrot_image[x][y][1]=0;
Mandelbrot_image[x][y][2]=255;
}
}
给实体添加纹理
glPushAttrib(GL_ALL_ATTRIB_BITS);
glGenTextures(1,&
Texture);
glBindTexture(GL_TEXTURE_2D,Texture);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE);
Get_Mandeldrot_image();
glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,300,400,0,GL_RGB,GL_UNSIGNED_BYTE,Mandelbrot_image);
glEnable(GL_TEXTURE_2D);
glMatrixMode(GL_TEXTURE);
glMatrixMode(GL_MODELVIEW);
glColor3f(1.0,1.0,0.00);
//glRotatef(90,1.0f,0.0f,0.0f);
glTranslated(0.0f,118.0f,-40.0f);
glutSolidTeapot(15);
//绘制茶壶
glPopAttrib();
.纹理图片由文件读入
AUX_RGBImageRec*LoadBMP(char*Filename)//载入位图图象
FILE*File=NULL;
//文件句柄
if(!
Filename)
returnNULL;
File=fopen(Filename,"
abc"
);
if(File)
fclose(File);
returnauxDIBImageLoadA(Filename);
intLoadGLTextures()
intStatus=FALSE;
AUX_RGBImageRec*TextureImage[1];
memset(TextureImage,0,sizeof(void*)*1);
if(TextureImage[0]=LoadBMP("
menu.bmp"
))
Status=TRUE;
texture[0]);
glBindTexture(GL_TEXTURE_2D,texture[0]);
//生成纹理
glTexImage2D(GL_TEXTURE_2D,0,3,TextureImage[0]->
sizeX,
TextureImage[0]->
sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,
data);
glTexParameteri
(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
//线形滤波
(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
if(TextureImage[0]){
if(TextureImage[0]->
data)
free(TextureImage[0]->
free(TextureImage[0]);
returnStatus;
//返回Status
3.2.5纹理添加模块限制条件
纹理图片添加时应注意比例
3.3法向量设置模块
3.3.1法向量设置模块功能
3.3.2法向量设置模块设计
首先用两个点算出一个向量,用同样的方法计算出另外一个向量,对求的的两个向量做笛卡尔积求出平面的法向量
3.3.2法向量设置模块数据结构
利用数组存储每个点的坐标值
3.3.4法向量设置模块具体实现代码
voidcalcNorm
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图形学 场景 设计 说明