1.不同的滤波方式的效果区别
使用Nearest滤波纹理的效果:看起来很斑驳
使用MipMapped的效果:看起来很平滑
2.
void glTexImage1D | (GLenum | target, |
| GLint | level, |
| GLint | internalFormat, |
| GLsizei | width, |
| GLint | border, |
| GLenum | format, |
| GLenum | type, |
| const GLvoid * | data); |
void glTexImage2D( | GLenum | target, |
| GLint | level, |
| GLint | internalFormat, |
| GLsizei | width, |
| GLsizei | height, |
| GLint | border, |
| GLenum | format, |
| GLenum | type, |
| const GLvoid * | data); |
|
void glTexImage3D( | GLenum | target, |
| GLint | level, |
| GLint | internalFormat, |
| GLsizei | width, |
GLsizei | height, | |
| GLsizei | depth |
| GLint | border, |
| GLenum | format, |
| GLenum | type, |
| const GLvoid * | data); |
|
这三个opengl函数用于从一个类存缓冲加载纹理数据,它们告诉了opengl如何解析data参数所指向的纹理数据。Opengl从data所指向的位置复制纹理信息,这种数据复制的代价是很高的。
九个参数:
(1). target
对应了GL_TEXTURE_1D或者GL_TEXTURE_2D或者GL_TEXTURE_3D
(2). internalFormat
GL_ALPHA 按照alpha值来存储纹理单元
GL_LUMINANCE 按照亮度值来存储纹理单元
GL_LUMINANCE_ALPHA 按照亮度和alpha值来存储纹理单元
GL_RGB 按照RGB成分存储纹理单元
GL_RGBA 按照RGBA成分来存储纹理单元
(3.) width, height, depth指定被加载纹理的宽度,高度,深度。这些值必须是2的指数。并不要求三维都相等。避免使用非2的整数次方的纹理。
(4). border边界允许我们对边界处的纹理进行设置,对它的宽度,高度深度进行扩展。对纹理过滤的处理中,纹理边界扮演了重要的角色。
(5). format
GL_RGB
GL_RGBA
GL_BGR
GL_BGRA
GL_RED
GL_GREEN
GL_BLUE
GL_ALPHA
GL_LUMINANCE
GL_LUMINANCE_ALPHA
GL_STENCIL_INDEX 每个像素包含单一的模板索引
GL_DEPTH_COMPONENT 每个像素包含单一的深度成分
(6). type
GL_UNSIGNED_BYTE 每种颜色的成分是8个无符号整数
GL_BYTE
GL_BITMAP 单个位、无颜色数据,和glBitmap相同
GL_UNSIGNED_SHORT
GL_SHORT
GL_UNSIGNED_INT
GL_INT
GL_FLOAT
CL_UNSIGNED_BYTE_3_2_2 经过包装的RGB
通过glTexImage函数所加载的纹理数据将经历(与像素和图像处理管线相同的)过程:像素包装,像素缩放,颜色表,积卷等操作
3.
void glTexSubImage2D( | GLenum | target, |
| GLint | level, |
| GLint | xoffset, |
| GLint | yoffset, |
| GLsizei | width, |
| GLsizei | height, |
| GLenum | format, |
| GLenum | type, |
| const GLvoid * | data); |
这个函数用于更新纹理,如果一个已经加载的纹理不再需要,可以被替换,可以全部替换也可以只替换一部分,替换的一个纹理图往往比glTexImage加载一个新纹理要快。Width和height只能是替换纹理真实的大小,如果对width和height的值进行改变会导致替换纹理失真。如果原纹理的大小和替换纹理的大小相同,原纹理将完全被替换。如果原纹理比替换纹理还小将看不到替换效果。如果原纹理比替换纹理大将替换原纹理的一部分,1/4、1/8…..