美文网首页
OpenGL纹理学习

OpenGL纹理学习

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

    纹理常用API简介

    ##1:改变像素存储方式
    void glPixelStorei (GLenum pname, GLint param);
    ##2:恢复像素存储方式
    void glPixelStoref (GLenum pname, GLfloat param);
    

    //参数(GLenum pname)1:GL_UNPACK_ALIGNMENT 指定OpenGL 如何从数据缓存区中解包图像 数据
    参数( GLint param)2:表示参数GL_UNPACK_ALIGNMENT 设置的值
    GL_UNPACK_ALIGNMENT 指内存中每个像素⾏行行起点的排列列请求,允许设置为1 (byte排列列)、2(排列列为偶数byte的⾏行行)、4(字word排列列)、8(⾏行行从双字节 边界开始)

    例如:glPixelStorei(GL_UNPACK_ALIGNMENT,1);
    

    3:从颜色缓存区内容作为像素图直接读取

    void glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels) OPENGL_DEPRECATED(10.0, 10.14);
    

    //参数1:x,矩形左下角的窗口坐标
    参数2:y,矩形左下角的窗口坐标
    参数3:width,矩形的宽,以像素为单位。
    参数4:height,矩形的高,以像素为单位。
    参数5:format,OpenGL的像素格式
    参数6:type,解释参数pixels指向的数据,告诉OpenGL使用缓存区中的什么数据类型来存储颜色分量,像素数据的数据类型。
    参数7:pixels,指向图形数据的指针

      例如:glReadBuffer(mode);—> 指定读取的缓存
                  glWriteBuffer(mode);—> 指定写⼊入的缓存
    

    4:载入纹理

    1) void glTexImage1D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels) OPENGL_DEPRECATED(10.0, 10.14);
    2) void glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels) OPENGL_DEPRECATED(10.0, 10.14);
    3) void glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels) OPENGL_DEPRECATED(10.0, 10.14);
    

    参数1: target:GL_TEXTURE_1D、GL_TEXTURE_2D、GL_TEXTURE_3D;
    参数2:Level:指定所加载的mip贴图层次。一般我们吧这个参数设置为0;
    参数3: internalformat:每个纹理单元中存储多少颜色成分;
    参数4:width,height,depth,指加载纹理的宽度、高度、深度。注意:!老版本这些值必须是2的整数次方。(这是因为OpenGL旧版本上遗留下的一个要求。当然现在已经支持不是2的整数次方。但开发者们还是习惯使用以2的整数次方去设置这些参数)
    参数5:border:允许为纹理贴图指定一个边界宽度
    参数6:format:所读象素数据元素的格式(索引值或R、G、B、A值,如
    表1-1所示)
    参数7:type 像素数据的数据类型(GL_UNSIGNED_BYTE,每个颜色分量都是一个8位无符号整数)
    参数8:pixels 指向图像数据的指针

    名称 象素数据类型
    GL_INDEX 单个颜色索引
    GL_RGB 先是红色分量,再是绿色分量,然后是蓝色分量
    GL_RED 单个红色分量
    GL_GREEN 单个绿色分量
    GL_BLUE 单个蓝色分量
    GL_ALPHA 单个Alpha值
    GL_LUMINANCE_ALPHA 先是亮度分量,然后是Alpha值
    GL_STENCIL_INDEX 单个的模板索引
    GL_DEPTH_COMPONENT 单个深度分量
    表1-1 函数glReadPixels()及glDrawPixels()的象素格式
    参考:https://blog.csdn.net/woaicide/article/details/50764416

    5:更新纹理

    1) void glTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels) OPENGL_DEPRECATED(10.0, 10.14);
    
    2) void glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels) OPENGL_DEPRECATED(10.0, 10.14);
    
    3) void glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels) OPENGL_DEPRECATED(10.0, 10.14);
    

    6:插入替换纹理

    1) void glCopyTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) OPENGL_DEPRECATED(10.0, 10.14);
    
    2) void glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) OPENGL_DEPRECATED(10.0, 10.14);
    
    3) void glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) OPENGL_DEPRECATED(10.0, 10.14);
    

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

    未完待续

    相关文章

      网友评论

          本文标题:OpenGL纹理学习

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