《图形编程技术学习》(四十九)如何获取纹理数据
一、如何获取纹理数据
1、由程序生成
2、获取图片文件
3、拷贝屏幕的一部分区域为当前纹理
glCopyTexImage2D();
4、替换纹理图像的一部分
glTexSubImage2D();
5、拷贝屏幕并替换当前纹理的一部分区域
glCopyTexSubImage2D(); --相当于上两者的结合
6、使用帧缓冲区对象直接渲染到纹理(OpenGL3.0及以上)
二、读取图像文件
1.OpenGL没有提供,freeglut中也没有提供
2.只能自己编,或用其他类库、源码中的读图片函数
(1)如:MFC中的类CImage
3.例子程序07-TreeWater中包含了读bmp和tga的函数,可用
三、读取TGA图像文件
1.BMP,JPG文件的最大优点是大多数图像软件都支持这种格式,但缺点是图像中不包含透明度信息(Alpha通道)
2.TGA是一种理想的纹理存储格式
(1)一方面,它具有与BMP类似的简单结构,程序处理较为简单
(2)另一方面,它还可以存储透明度信息,即包含Alpha通道
(3)再者,它还具有压缩格式和非压缩格式两种存储方式
3.还有其他常用的图形格式:png,dds等
四、纹理带有alpha通道的意义
1.可以为每个像素设置alpha值
五、拷贝屏幕的一部分区域为当前纹理
void glCopyTexImage2D( GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border );
六、替换纹理图像的一部分
void glTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels );
七、拷贝屏幕并替换当前纹理的一部分区域
void glCopyTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height );
八、图形流水线
Frame buffer->Texture