推荐星级:
- 1
- 2
- 3
- 4
- 5
OpenGL教程-纹理映射
资料介绍
文档为OpenGL教程-纹理映射总结文档,是一份不错的参考资料,感兴趣的可以下载看看,,,,,,,,,,,,,
部分文件列表
文件名 | 大小 |
OpenGL教程-纹理映射.pdf | 908K |
部分页面预览
(完整内容请下载后查看)纹理映射(Texture Mapping,)是⼀种中等难
度的渲染⽅法。其基本思路是将⼀张或者⼏张图⽚作为纹理,将其贴在模型表⾯。纹理映射
的算法实在是⾮常简单。⽤OpenGL实现纹理映射,最⼤的难度不在于OpenGL,⽽在于如
何加载图⽚!⽤C++读取图⽚有很多库可以选择,例如CImg、ImageStone和OpenCV之类
EasyBMP),只能读取BMP
数据,够⽤也跨平台。所需要的就是将纹理图全部转换为BMP格式,⽤图像处理软件很容
易做到这⼀点。我们引⼊⼀个新的函数来加载纹理:
//加载纹理
GLuint create_texture_2d(const char* texture_file)
{
//使⽤EasyBMP加载纹理图⽚
//使⽤什么库没有关系,最终纹理需要⽣成⼀个数组,数组的格式如下:
//{r1,g1,b1,r2,g2,b2,...,rn,gn,bn},其中ri,gi,bi表⽰i位置的
//像素点的rgb值。如果图像由alpha值,数组的格式如下:
//{r1,g1,b1,a1,r2,g2,b2,a2,...,rn,gn,bn,an}
BMP texture;
texture.ReadFromFile(texture_file);
int texture_width=texture.TellWidth();
int texture_height=texture.TellHeight();
unsigned char* texture_data=new unsigned
char[texture_width*texture_height*3];
int i=0;
for(int row=0;row<texture_height;row++)
for(int col=0;col<texture_width;col++)
{
texture_data[i++]=texture(row,col)->Red;
texture_data[i++]=texture(row,col)->Green;
texture_data[i++]=texture(row,col)->Blue;
}
//创建纹理,并将纹理数据传递给OpenGL
GLuint textures[1];
glGenTextures(1, textures);
glBindTexture(GL_TEXTURE_2D, textures[0]);
//设置纹理参数
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_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
GL_LINEAR);
//传输数据
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB,
texture_width,texture_height, 0,GL_RGB, GL_UNSIGNED_BYTE,
texture_data);
delete []texture_data;
return textures[0];
}
加载纹理通常分为以下⼏个步骤:
(1)⽤图像处理库(这⾥是EasyBMP)读取纹理⽂件。
全部评论(0)