OpenGL 纹理对象

453 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情


  1. Swift Optional
  2. Swift Enum
  3. iOS开发 做一个三角形
  4. Swfit 指针类型
  5. Swift 属性(下)
  6. Swift 属性
  7. Swift 小结
  8. Swift 类与结构体(下)
  9. Swift 类的生命周期
  10. Swift 类的初始化器
  11. Swift 类与结构体
  12. OpenGL 压缩纹理
  13. OpenGL 隧道坐标计算
  14. 0penGL 像素格式及数据类型
  15. OpenGL 纹理对象
  16. OpenGL 纹理
  17. OpenGL 模型变化
  18. OpenGL 视图
  19. OpenGL 矩阵
  20. OpenGL 向量
  21. OpenGL 颜色混合
  22. OpenGL 深度测试的潜在风险
  23. OpenGL 浅析深度测试
  24. OpenGL 浅析隐藏面消除
  25. OpenGL 图元连接方式
  26. 记WKWebView与HTML完成交互两三事
  27. OpenGL 渲染流程图解析
  28. OpenGL 控制你的正方形
  29. OpenGL 专业名词解释
  30. OpenGL 环境搭建 - MacOS

上一片,我们整理了纹理内容,今天,我们来看看纹理对象的内容。

纹理对象

使用函数分配纹理对象 ; 指定纹理对象的数量 和 指针(指针指向一个无符号整形数组,由纹理对象标识符填充)

void glGenTextures (GLsizei n, GLuint * textures);

绑定纹理状态; 参数target:GI_TEXTURE_1D、GI TEXTURE_2D、CI_TEXTURE_3D; 参数texture:需要绑定的纹理对象

void glBindTexture (GLenum target, GLunit texture);

删除绑定纹理对象;纹理对象 以及 纹理对象指针(指针指向一个无符号整形数组,由纹理对象标识符填充)。

void glDeleterextures (GLsizei n.GLuint *textures);

测试纹理对象是否有效;如果texture是一个已经分配空问的纹理对象,那么这个函数会返回GL_IRUE,否则会返回GL_FAISE。

GLboolean giIsTexture (GLuint texture);

设置纹理参数

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

参数1:target,指定这些参数将要应用在那个纹理模式上,比如GL_TEXTURE_1D、GL_工EXTURE_2D、GL_TEXTURE_3D;
参数2:pname,指定需要设置那个纹理参数;
参数3:param,设定特定的纹理参数的值;

设置过滤方式

1.001.png

纹理过滤方式比较

image.png

纹理参数设置函数

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR)
纹理放大时,使用线性过滤。

glIexParameteri(GL_TEXTURE_2D, GL_TEXTURE MAG _FILIER, GL _NEAREST);
glTexParameteri(GL TEXTURE 2D,GL TEXTURE MIN FILTER,GL NEAREST);

glTexParameteri (GL TEXTURE 2D,GL TEXTURE MAG FILTER, GL LINEAR);
glTexParameteri (GL TEXTURE 2D,GL TEXTURE MIN FILTER, GL LINEAR);

设置环绕方式

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

当纹理坐标超出默认范围时,每个选项都有不同的视觉效果输出。我们来看看这些纹理图像的例子:

image.png

设置环绕方式

参数1:GI_IEXIURE_1D、 GI_IEXTURE_2D、GL_TEXTURE_3D
参数2:GLTEXTURE_ WRAP_S、GI_TEXTURE_卫、GI_卫EXTURE_R,针对s,t,r坐标
参数3:GI_REPEAT、GL_CIAMP、GL_CIAMP_TO_EDGE、GICLAMP_TO_ BORDER
    GI_REPEAT:0penGL 在纹理坐标超过1.0的方向上对纹理进行重复;
    GI_CIAMP:所需的纹理单元取自纹理边界或IEXTURE BORDER COLOR.
    GI_CIAMPTO EDGE环绕模式强制对范围之外的纹理坐标沿着合法的纹理单元的最后一行或者最后列来进行采样。
    GICLAMP_TO_BORDER:在纹理坐标在0.010范国之外的只使用边界纹理单元。边界纹理单元是作为国绕基本图像的额外的行和列,并与基本纹理图像一起加载的。
    
glTextParameteri (GL_TEXTURE 2D, GL TEXTURE_WRAR S, GL_CLAMP_TO_EDGE) ;
glTextParameteri (GL_TEXTURE 2D,GL TEXTURE_WRAR T, GL_CLAMP_TO_EDGE) ;