您现在的位置是:首页 > 教程 > OpenGL教程-纹理映射
推荐星级:
  • 1
  • 2
  • 3
  • 4
  • 5

OpenGL教程-纹理映射

更新时间:2019-11-08 09:25:06 大小:908K 上传用户:杨义查看TA发布的资源 标签:opengl 下载积分:0分 评价赚积分 (如何评价?) 收藏 评论(0) 举报

资料介绍

文档为OpenGL教程-纹理映射总结文档,是一份不错的参考资料,感兴趣的可以下载看看,,,,,,,,,,,,,

部分文件列表

文件名 大小
OpenGL教程-纹理映射.pdf 908K

部分页面预览

(完整内容请下载后查看)
纹理映射(Texture Mapping)是⼀种中等难  
度的渲染⽅法。其基本思路是将⼀张或者⼏张图⽚作为纹理,将其贴在模型表⾯。纹理映射  
的算法实在是⾮常简单。⽤OpenGL实现纹理映射,最⼤的难度不在于OpenGL,⽽在于如  
何加载图⽚!⽤C++读取图⽚有很多库可以选择,例如CImgImageStoneOpenCV之类  
EasyBMP),只能读取BMP  
数据,够⽤也跨平台。所需要的就是将纹理图全部转换为BMP格式,⽤图像处理软件很容  
易做到这⼀点。我们引⼊⼀个新的函数来加载纹理:  
//加载纹理  
GLuint create_texture_2d(const char* texture_file)  
{
//使⽤EasyBMP加载纹理图⽚  
//使⽤什么库没有关系,最终纹理需要⽣成⼀个数组,数组的格式如下:  
//{r1,g1,b1,r2,g2,b2,...,rn,gn,bn},其中rigibi表⽰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)

暂无评论