美文网首页OpenGL
08-OpenGL 纹理基础(上)

08-OpenGL 纹理基础(上)

作者: SPIREJ | 来源:发表于2019-05-24 11:02 被阅读0次

    1. 读取文件

    GLbyte *gltReadTGABits(const char *szFileName,
                           GLint *iWidth,
                           GLint *iHeight,
                           GLint *iComponents,
                           GLenum *eFormat,
                           GLbyte *pData = NULL);
    

    szFileName:纹理文件名称
    iWidth、iHeight:宽度地址、高度地址
    iComponents:组件地址
    eFormat:格式地址
    返回值:GLbyte* 指向图像数据的指针

    2. 载入纹理

    void GLAPIENTRY glTexImage2D (GLenum target,
                                  GLint level,
                                  GLint internalformat,
                                  GLsizei width,
                                  GLsizei height,
                                  GLint border,
                                  GLenum format,
                                  GLenum type,
                                  const GLvoid *pixels);
    

    target: 纹理维度 GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D
    level: mip贴图层次,一般设置为0
    internalformat: 每个纹理单元中存储多少颜色成分
    width、height、depth: 加载纹理的宽度、高度、深度。习惯使用2的整数次方去设置这些参数
    border: 允许为纹理贴图指定一个边界宽度
    format: OpenGL 像素格式
    type: 解释参数pixels指向的数据,
    告诉OpenGL 使⽤缓存区中的什么数据类型来存储颜⾊分量,像素数据的数据类型,
    参考 表1-2
    pixels: 指向图形数据的指针

    3. 设置纹理参数

    void glTexParameterf (GLenum target, GLenum pname, GLint param);
    void glTexParameteri (GLenum target, GLenum pname, GLint param);
    void glTexParameterfv (GLenum target, GLenum pname, GLint param);
    void glTexParameteriv (GLenum target, GLenum pname, GLint param);
    

    target: 纹理维度 GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D
    pname:指定需要设置哪个纹理参数
    param:指定特定的纹理参数的值

    //参数1:纹理维度
    //参数2:为S/T坐标设置模式
    //参数3:环绕模式
    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:线性过滤
    
    //纹理缩小时,使用邻近过滤
    glTexParameteri (FL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    
    //纹理放大时,使用线性过滤
    glTexParameteri (FL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    

    4. 分配纹理对象

    void glGenTextures (GLsizei n, GLuint *textures);
    

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

    5. 绑定纹理状态

    void glBindTexture (GLenum target, GLuint texture);
    

    target:GL_TEXTURE_1D、GL_TEXTURE_2D、GL_TEXTURE_3D
    texture:需要绑定的纹理对象

    6. 删除绑定纹理对象

    void glDeleteTextures (GLsizei n, const GLuint *textures);
    

    7. 测试纹理对象是否有效

    GLboolean glIsTexture (GLuint texture);
    

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

    表1-1环绕方式

    环绕方式 描述
    GL_REPEAT 对纹理的默认行为。重复纹理图像
    GL_MIRRORED_REPEAT 和GL_REPEAT一样,但每次重复图像是镜像放置的
    GL_CLAMP_TO_EDGE 纹理坐标会被约束在0到1之间,超出的部分会重复纹理坐标的边缘,产生一种边缘被拉伸的效果
    GL_CLAMP_BORDER 超出的坐标为用户指定的边缘颜色

    表 1-2OpenGL 像素格式

    常量 描述
    GL_RGB 描述红、绿、蓝顺序排列的颜色
    GL_RGBA 按照红、绿、蓝、Alpha顺序排列的颜⾊
    GL_BGR 按照蓝、绿、红顺序排列颜⾊
    GL_BGRA 按照蓝、绿、红、Alpha顺序排列颜⾊
    GL_RED 每个像素只包含了了⼀个红⾊分量
    GL_GREEN 每个像素只包含了一个绿⾊分量
    GL_BLUE 每个像素只包含了⼀个蓝色分量
    GL_RG 每个像素依次包含了一个红色和绿色的分量
    GL_RED_INTEGER 每个像素包含了⼀个整数形式的红色分量
    GL_GREEN_INTEGER 每个像素包含了一个整数形式的绿⾊分量
    GL_BLUE_INTEGER 每个像素包含了一个整数形式的蓝⾊分量
    GL_RG_INTEGER 每个像素依次包含了一个整数形式的红⾊、绿色分量
    GL_RGB_INTEGER 每个像素包含了一个整数形式的红⾊、蓝色、绿色分量
    GL_RGBA_INTEGER 每个像素包含了一个整数形式的红色、蓝色、绿色、Alpah分量
    GL_BGR_INTEGER 每个像素包含了一个整数形式的蓝色、绿⾊、红⾊分量
    GL_BGRA_INTEGER 每个像素包含了一个整数形式的蓝色、绿色、红⾊、Alpah分量
    GL_STENCIL_INDEX 每个像素只包含了一个模板值
    GL_DEPTH_COMPONENT 每个像素只包含一个深度值
    GL_DEPTH_STENCIL 每个像素包含⼀个深度值和⼀个模板值

    相关文章

      网友评论

        本文标题:08-OpenGL 纹理基础(上)

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