现在的位置: 首页 > 综合 > 正文

opengl纹理映射的学习总结

2018年02月15日 ⁄ 综合 ⁄ 共 1946字 ⁄ 字号 评论关闭

 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…..

抱歉!评论已关闭.