word
word
1 / 56
word
《计算机图形学》实验报告
题目: 3D真实感场景绘制
: 郭继杰
学号: 2014214168
班级: 地信141
学院(向前运动) (旋转)
7.纹理贴图过程
①载入位图图像:
AUX_RGBImageRec *LoadBMP(CHAR *Filename) //载入位图图象
{
FILE *File=NULL; //文件句柄
if (!Filename) //确保文件名已提供
{
word
word
9 / 56
word
returnNULL; //如果没提供,返回 NULL
}
File=fopen(Filename,"r"); //尝试打开文件
if (File) //判断文件是否存在?
{
fclose(File); //关闭句柄
return auxDIBImageLoadA(Filename); //载入位图并返回指针
}
returnNULL; //如果载入失败,返回 NULL
}
②位图转化成纹理:
int LoadGLTextures() //载入位图(调用上面的代码)并转换成纹理
{
int Status= FALSE; //状态指示器
AUX_RGBImageRec *TextureImage[2]; //创建纹理的存储空间
memset(TextureImage,0,sizeof(void *)*1);//将指针设为 NULL
//载入位图,检查有无错误,如果位图没找到则退出
if ((TextureImage[0]=LoadBMP("Data/"))&&(TextureImage[1]=LoadBMP("Data/")))
{
Status= TRUE; //将Status设为TRUE
glGenTextures(2, &texture[0]); //创建纹理
for(int loop=0;loop<2;loop++)
word
word
10 / 56
word
{
glBindTexture(GL_TEXTURE_2D,texture[loop]);//绑定纹理
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);//设置滤波
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[loop]->sizeX, TextureImage[loop]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[loop]->data);//生成纹理
}
}
for (int loop=0; loop<2; loop++)
{
if (TextureImage[loop]!=NULL) //判断纹理是否存在
{
if (TextureImage[loop]->data!=NULL) //纹理图像是否存在
{
free(TextureImage[loop]->data); //释放纹理图像占用存
}
free(TextureImage[loop]); //释放图像结构
}
}
return Status;//返回 Status
}
③调用纹理
glBindTexture(GL_TEXTURE_2D, texture[0]); //选择纹理
glBegin(GL_QUADS);//开始绘制四边形
glTexCoord2f(, ); glVertex3f( , , ); // 纹理和四边形的右下
word
word
11
计算机图形学课程设计 来自淘豆网m.daumloan.com转载请标明出处.