《图形编程技术学习》(四十九)如何获取纹理数据

一、如何获取纹理数据

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



发布于 2019-11-09 10:48

文章被以下专栏收录

    图形编程技术学习

    这个系列主要是学习北京林业大学杨刚教授的课程时的学习笔记,课程简洁易懂又含以重要知识,谨以此分享出来(已获得了老师本人的许可)。其间如有错误的地方,欢迎知友们指教~此外关于图形学相关的知识可能也会分享出来。 每一篇文章都不会很长,相对减少了阅读压力~