计算机图形学实验三纹理映射Word下载.docx

上传人:b****5 文档编号:19850917 上传时间:2023-01-10 格式:DOCX 页数:12 大小:99.75KB
下载 相关 举报
计算机图形学实验三纹理映射Word下载.docx_第1页
第1页 / 共12页
计算机图形学实验三纹理映射Word下载.docx_第2页
第2页 / 共12页
计算机图形学实验三纹理映射Word下载.docx_第3页
第3页 / 共12页
计算机图形学实验三纹理映射Word下载.docx_第4页
第4页 / 共12页
计算机图形学实验三纹理映射Word下载.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

计算机图形学实验三纹理映射Word下载.docx

《计算机图形学实验三纹理映射Word下载.docx》由会员分享,可在线阅读,更多相关《计算机图形学实验三纹理映射Word下载.docx(12页珍藏版)》请在冰豆网上搜索。

计算机图形学实验三纹理映射Word下载.docx

intmOldY,mOldX;

boolfullscreen;

////////////////////////////////////

floateye[3]={0.0f,0.0f,7.0f};

floatrot[3]={45.0f,45.0f,0.0f};

constintESC=27;

intwireframe=0;

constintGL_WIN_WIDTH=640;

constintGL_WIN_HEIGHT=480;

constintGL_WIN_INITIAL_X=0;

constintGL_WIN_INITIAL_Y=0;

/*arraytoholdtexturehandles*/

GLuintg_TexturesArray[MAX_TEXTURES];

BOOLLoadTextureGL(char*Filename,GLuint&

texture)//加载一个bmp图片(new)

{

AUX_RGBImageRec*TextureImage;

//为纹理开辟存储空间

FILE*File=NULL;

//文件句柄

if(!

Filename)//确保文件名已经提供

{

returnNULL;

//如果没有则返回NULL

}

File=fopen(Filename,"

r"

);

//检查文件是否存在

if(File)//文件存在吗?

fclose(File);

//关闭File文件句柄

TextureImage=auxDIBImageLoad(Filename);

//载入图片并返回其指针

glGenTextures(1,&

texture);

//返回唯一的纹理名字来标识纹理,保存在texture中

//使用来自位图数据生成的典型纹理

glBindTexture(GL_TEXTURE_2D,texture);

//生成纹理

glTexImage2D(GL_TEXTURE_2D,0,3,TextureImage->

sizeX,TextureImage->

sizeY,

0,GL_RGB,GL_UNSIGNED_BYTE,TextureImage->

data);

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);

//线形滤波

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);

if(TextureImage)//纹理是否存在

if(TextureImage->

data)//纹理图像是否存在

{

free(TextureImage->

//释放纹理存储空间

}

free(TextureImage);

//释放图像结构

returntrue;

}

boolLoadBMP(char*filename,GLuint&

texture)//调贴图大小为2的幂

{AUX_RGBImageRec*pImage=NULL;

pImage=auxDIBImageLoad(filename);

//装入位图

if(pImage==NULL)returnfalse;

//位图没装入返回错误

//生成贴图(纹理)

glBindTexture(GL_TEXTURE_2D,texture);

//捆绑贴图(纹理)

gluBuild2DMipmaps(GL_TEXTURE_2D,4,//

pImage->

sizeX,//图形宽

sizeY,//图形高

GL_RGB,GL_UNSIGNED_BYTE,

data//图形数据

);

free(pImage->

//释放位图数据占据的内存资源

free(pImage);

//返回成功

voidInit()

//glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);

//glShadeModel(GL_SMOOTH);

glEnable(GL_DEPTH_TEST);

glClearColor(0.0,0.0,0.0,1.0);

//enabletextureandbindsatexturetothefirstelementofthearray

glEnable(GL_TEXTURE_2D);

//LoadTextureGL("

mybmp1.bmp"

g_TexturesArray[0]);

Cars.bmp"

g_TexturesArray[1]);

LoadBMP("

1.bmp"

2.bmp"

3.bmp"

g_TexturesArray[2]);

4.bmp"

g_TexturesArray[3]);

5.bmp"

g_TexturesArray[4]);

6.bmp"

g_TexturesArray[5]);

return;

//------------------------------------------------------------------------

//Windowresizefunction

voidglutResize(intwidth,intheight)

glViewport(0,0,width,height);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

/*modifythislinetochangeperspectivevalues*/

gluPerspective(45.0,(float)width/(float)height,1.0,300.0);

glMatrixMode(GL_MODELVIEW);

//Functionthathandleskeyboardinputs

voidglutKeyboard(unsignedcharkey,intx,inty)

switch(key)

caseESC:

exit(0);

case'

W'

:

w'

wireframe=!

wireframe;

voidclamp(float*v)

inti;

for(i=0;

i<

3;

i++)

if(v[i]>

360||v[i]<

-360)

v[i]=0;

//Movesthescreenbasedonmousepressedbutton

voidglutMotion(intx,inty)

if(mButton==BUTTON_LEFT)

/*rotatesscreen*/

rot[0]-=(mOldY-y);

rot[1]-=(mOldX-x);

clamp(rot);

elseif(mButton==BUTTON_RIGHT)

eye[2]-=(mOldY-y)*0.05f;

//hereImultiplybya0.2factorto

//slowdownthezoom

}

elseif(mButton==BUTTON_LEFT_TRANSLATE)

eye[0]+=(mOldX-x)*0.01f;

eye[1]-=(mOldY-y)*0.01f;

mOldX=x;

mOldY=y;

//Functionthathandlesmouseinput

voidglutMouse(intbutton,intstate,intx,inty)

if(state==GLUT_DOWN)

switch(button)

caseGLUT_LEFT_BUTTON:

if(glutGetModifiers()==GLUT_ACTIVE_CTRL)

mButton=BUTTON_LEFT_TRANSLATE;

break;

}else

mButton=BUTTON_LEFT;

caseGLUT_RIGHT_BUTTON:

mButton=BUTTON_RIGHT;

}elseif(state==GLUT_UP)

mButton=-1;

voidglutMenu(intvalue)

switch(value)

case1:

glutFullScreen();

return;

case2:

glutReshapeWindow(GL_WIN_WIDTH,GL_WIN_HEIGHT);

case3:

voidglutSpecial(intvalue,intx,inty)

caseGLUT_KEY_F1:

if(fullscreen)glutFullScreen();

elseglutReshapeWindow(GL_WIN_WIDTH,GL_WIN_HEIGHT);

fullscreen=!

fullscreen;

voidglutDisplay(void)

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

if(wireframe)

glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);

else

glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);

glPushMatrix();

/*translatecameratothecoordinatesprovidedbyeyearray*/

glTranslatef(-eye[0],-eye[1],-eye[2]);

/*rotatesthescreenbytheanglesprovidedbyrotarray*/

glRotatef(rot[0],1.0f,0.0f,0.0f);

glRotatef(rot[1],0.0f,1.0f,0.0f);

glRotatef(rot[2],0.0f,0.0f,1.0f);

glBindTexture(GL_TEXTURE_2D,g_TexturesArray[0]);

glBegin(GL_QUADS);

//FrontFace,red

glNormal3f(0.0f,0.0f,1.0f);

glTexCoord2f(0.0f,0.0f);

glColor3f(1.0f,1.0f,1.0f);

glVertex3f(-1.0f,-1.0f,1.0f);

glTexCoord2f(1.0f,0.0f);

glVertex3f(1.0f,-1.0f,1.0f);

glTexCoord2f(1.0f,1.0f);

glColor3f(1.7f,1.0f,1.0f);

glVertex3f(1.0f,1.0f,1.0f);

glTexCoord2f(0.0f,1.0f);

glVertex3f(-1.0f,1.0f,1.0f);

glEnd();

glBindTexture(GL_TEXTURE_2D,g_TexturesArray[1]);

//BackFace,green

glNormal3f(0.0f,0.0f,-1.0f);

glVertex3f(-1.0f,-1.0f,-1.0f);

glVertex3f(-1.0f,1.0f,-1.0f);

glColor3f(1.0f,0.7f,1.0f);

glVertex3f(1.0f,1.0f,-1.0f);

glColor3f(1.0f,1.7f,1.0f);

glVertex3f(1.0f,-1.0f,-1.0f);

//TopFace,blue

glBindTexture(GL_TEXTURE_2D,g_TexturesArray[2]);

glNormal3f(0.0f,1.0f,0.0f);

glColor3f(1.0f,1.0f,1.7f);

//BottomFace,yellow

glBindTexture(GL_TEXTURE_2D,g_TexturesArray[3]);

glNormal3f(0.0f,-1.0f,0.0f);

glColor3f(1.7f,1.7f,1.0f);

//Rightface,cyan

glBindTexture(GL_TEXTURE_2D,g_TexturesArray[4]);

glNormal3f(1.0f,0.0f,0.0f);

glColor3f(1.0f,1.7f,1.7f);

//LeftFace,magenta

glBindTexture(GL_TEXTURE_2D,g_TexturesArray[5]);

glNormal3f(-1.0f,0.0f,0.0f);

glColor3f(1.7f,1.0f,1.7f);

glPopMatrix();

glFlush();

glutSwapBuffers();

rot[1]+=0.1;

 

intmain(intargc,char**argv)

{glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH|GLUT_RGBA);

glutInitWindowPosition(GL_WIN_INITIAL_X,GL_WIN_INITIAL_Y);

glutInitWindowSize(GL_WIN_WIDTH,GL_WIN_HEIGHT);

glutInit(&

argc,argv);

glutCreateWindow("

bmp_maping"

glutReshapeFunc(glutResize);

//calledeverytimethescreenisresized

glutDisplayFunc(glutDisplay);

//calledwhenwindowneedstoberedisplayed

glutIdleFunc(glutDisplay);

//calledwhenevertheapplicationisidle

glutKeyboardFunc(glutKeyboard);

//calledwhentheapplicationreceivesainputfromtheke

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

当前位置:首页 > 教学研究 > 教学反思汇报

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

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