[OpenGL]图形学之旅:纹理贴图三部曲
2012-12-11 18:53
489 查看
下面开始介绍一下OpenGL中的纹理贴图,具体分以下三步:
0.声明存储贴图的相关数据:
1.引入bmp位图:
2.将载入的位图转为纹理:
3.将纹理贴图应用到场景中:
以上三步便完成了纹理贴图,具体原理与细节以后补上。
0.声明存储贴图的相关数据:
#define MAXTEXTURE 1 GLuint texture[MAXTEXTURE]; //定义纹理数组,用于存放后面得到的图像纹理信息
1.引入bmp位图:
AUX_RGBImageRec *LoadImage(char *Filename) //载入位图数据 { FILE *File = NULL; if (!Filename) { return NULL; } File = fopen(Filename,"r"); if (File) { fclose(File); return auxDIBImageLoad(Filename); } return NULL; }
2.将载入的位图转为纹理:
BOOL LoadTextureGL(void) //将载入的位图转化为纹理 { BOOL State = false; AUX_RGBImageRec *TextureImage[MAXTEXTURE]; //创建纹理的存储空间 memset(TextureImage, 0, sizeof(void *) * MAXTEXTURE); //清除纹理存储空间中的图像信息为空 // 加载图片并检查是否出错 ,如果图片不存在则返回 if (TextureImage[0]=LoadImage("Data/sky.bmp")) { State=true; glGenTextures(MAXTEXTURE, &texture[0]); //将载入的图像转化成纹理,保存到texture数组中 // 用图片数据产生纹理 for (int i=0; i<MAXTEXTURE; ++i) { glBindTexture(GL_TEXTURE_2D, texture[i]);// 使用来自位图数据生成的典型纹理 // 生成纹理 gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[i]->sizeX, TextureImage[i]->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[i]->data); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); //当纹理放大得原始的纹理大 ( GL_TEXTURE_MAG_FILTER )或缩小得比原始得纹理小( GL_TEXTURE_MIN_FILTER )时采用线性滤波方式 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); } } for (int i=0; i<MAXTEXTURE; ++i) //释放用来存储位图信息的内存 { if (TextureImage[i]) { if (TextureImage[i]->data) { free(TextureImage[i]->data); } free(TextureImage[i]); } } return State; }
3.将纹理贴图应用到场景中:
void GameScene::DrawSky() { glEnable(GL_TEXTURE_2D); // 启用纹理映射 glEnable(GL_DEPTH_TEST); //开启深度测试 glDisable(GL_BLEND); // 关闭混合 LoadTextureGL(); glBindTexture(GL_TEXTURE_2D,texture[0]); //绑定纹理在下面绘制的物体上 glBegin(GL_QUADS); //左边是原图的坐标,原图必须是2的整数倍,最小64*64,还有128*128,最大不要256*256,会非常的卡。 //右边是绘制的图形的坐标 glTexCoord2f(0.0f,0.0f);glVertex3f(0.0f,1.0f,1.0f); glTexCoord2f(1.0f,0.0f);glVertex3f(1.0f,1.0f,1.0f); glTexCoord2f(1.0f,1.0f);glVertex3f(1.0f,1.0f,0.0f); glTexCoord2f(0.0f,1.0f);glVertex3f(0.0f,1.0f,0.0f); glEnd(); glDisable(GL_TEXTURE_2D); // 启用纹理映射 glDisable(GL_DEPTH_TEST); //开启深度测试 }
以上三步便完成了纹理贴图,具体原理与细节以后补上。
相关文章推荐
- Opengl_13_纹理贴图
- OpenGL系统设计-纹理贴图(4)
- 关于openGL纹理贴图的一些函数
- OpenGL纹理贴图
- OpenGL_ES|WinCE纹理贴图的方式绘制字符串
- NeHe的opengl教程delphi版(6)----纹理映射(贴图)
- windows下opengl多重纹理贴图
- opengl 绘制简单的带纹理贴图的立方体
- 关于大四上学期的计算机图形学实验报告123——opengl建模、载入OBJ文件、纹理贴图、光照、交互。
- OpenGL的几何变换-纹理贴图
- OpenGL--纹理贴图基础
- OpenGL学习笔记——纹理贴图
- 使用glfw库将OpenCV读取到的图片作为OpenGL的背景纹理贴图
- OpenGL深入探索——纹理加载(ImageMagick)与贴图
- OpenGL+Qt界面(四) 纹理贴图
- OpenGL纹理贴图 JPEG纹理
- OpenGL学习十七:纹理贴图
- OpenGL纹理贴图 旋转的立方体
- OpenGL5-纹理贴图
- OpenGL之纹理贴图(1):Basic