美文网首页
OpenGL纹理学习(二)

OpenGL纹理学习(二)

作者: 忆痕无殇 | 来源:发表于2019-05-30 20:16 被阅读0次

    7:使用颜色缓存区加载数据,形成新的纹理使用

    extern void glCopyTexImage1D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border) OPENGL_DEPRECATED(10.0, 10.14);
    
    extern void glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) OPENGL_DEPRECATED(10.0, 10.14);
    

    参数1: target:GL_TEXTURE_1D、GL_TEXTURE_2D、GL_TEXTURE_3D;
    参数2:Level:指定所加载的mip贴图层次。一般我们吧这个参数设置为0;
    参数3: internalformat:每个纹理单元中存储多少颜色成分;
    参数4:x、y在颜色缓存区中指定了开始读取纹理数据的位置。缓存区里的数据,是源缓存区通过glReadBuffer设置的。
    注意:不存在三维的,我们无法获取立体的纹理数据

    8:纹理对象

    1)使用函数分配纹理对象

    void glGenTextures (GLsizei n, GLuint *textures);
    

    指定纹理对象的数量和指针(指针指向一个无符号整型数组,由纹理对象标识符填充)。
    2)绑定纹理状态

    glBindTexture(GLenum target, GLuint *texture);
    

    参数1: target:GL_TEXTURE_1D、GL_TEXTURE_2D、GL_TEXTURE_3D;
    参数2: texture:需要绑定的纹理对象
    3)删除绑定纹理对象

    glDeleteTextures (GLsizei n, const GLuint *textures);
    

    指定纹理对象的数量和指针(指针指向一个无符号整型数组,由纹理对象标识符填充)。
    4)测试纹理对象是否有效

    GLboolean glIsTexture (GLuint texture);
    

    如果texture是一个以ing分配空间的纹理对象,那么这个函数返回GL_TRUE,否则会返回GL_FALSE。

    9:设置纹理参数

      glTexParameterf(GLenum target, GLenum pname, GLfloat param);
      glTexParameteri(GLenum target, GLenum pname, GLint param);
      glTexParameterfv(GLenum target, GLenum pname, const GLfloat *params);
      glTexParameteriv(GLenum target, GLenum pname, const GLint *params);
    

    参数1: target:指定这些参数将要应用在哪个纹理模式上。
    参数2: pname:指定需要设置哪个纹理参数
    参数3: param:设定特定的纹理参数的值

    10:设置过滤方式

    1:临近过滤GL_NEAREST
    2:线性过滤GL_LINEAR
    应用

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    

    纹理缩小时,使用临近过滤。纹理放大时,使用线性过滤。

    11:设置环绕方式

    1)GL_REPEAT:对纹理的默认行为。在纹理坐标超过1.0方向上重复纹理图像。
    2)GL_MIRRORED_REPEAT:和GL_REPEAT一样,但每次重复图片时镜像放置的
    3)GL_CLAMP_TO_EDGE:纹理坐标会被约束在0到1之间,超出的部分会重复纹理坐标的边缘,产生一种边缘被拉伸的效果。
    4)GL_CLAMP_TO_BORDER:在纹理坐标在0.0到1.0范围之外只使用边界纹理单元。边界纹理单元是作为围绕基本图像的额外的行列,并与基本纹理图像一起加载的。

       glTexParameteri(GLenum target, GLenum pname, GLint param);
    
    例如:
     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
    

    参数1:同上
    参数2: GL_TEXTURE_WRAP_S、GL_TEXTURE_WRAP_T、GL_TEXTURE_WRAP_R,针对s、t、r纹理坐标。同x、y、z。
    注:纹理坐标默认左下角为(0,0)不可以交叉。可以旋转。
    参数3:
    1)GL_REPEAT:在纹理坐标超过1.0的方向上对纹理进行重复。
    2)GL_CLAMP:所需的纹理单元取自纹理边界或者TEXTURE_BORDER_COLOR.
    3)GL_CLAMP_TO_EDGE:环绕模式强制对范围之外的纹理坐标沿着合法的纹理单元的最后一行或者最后一列进行采样。
    4)GL_CLAMP_TO_BORDER:在纹理坐标在0.0到1.0范围之外的只使用边界纹理单元。边界纹理单元是作为围绕基本图像的额外的行和列,并与基本纹理图像一起加载的。


    OpenGL像素格式.png

    注:来源CC老师PPT

    相关文章

      网友评论

          本文标题:OpenGL纹理学习(二)

          本文链接:https://www.haomeiwen.com/subject/zzovtctx.html