当前位置:   article > 正文

OpenGL之纹理的常用方法_glteximage2d与glsubteximage

glteximage2d与glsubteximage

常用函数

1.载入纹理 glTexImage2D

void glTexImage2D(GLenum target,GLint level,GLint
internalformat,GLsizei width,GLsizei height,GLint
border,GLenum format,GLenum type,void * data);

参数:

  • target:GL_TEXTURE_1DGL_TEXTURE_2DGL_TEXTURE_3D
  • Level:指定所加载的mip贴图层次。⼀一般我们都把这个参数设置为0。
  • internalformat:每个纹理理单元中存储多少颜⾊色成分。
  • width、height、depth参数:指加载纹理理的宽度、⾼高度、深度。==注意!==这些值必须是 2的整数次⽅方。(这是因为OpenGL 旧版本上的遗留留下的⼀一个要求。当然现在已经可以⽀支持不不是 2的整数次⽅方。但是开发者们还是习惯使⽤用以2的整数次⽅方去设置这些参数。)
  • border参数:允许为纹理理贴图指定⼀一个边界宽度。
  • format参数:OpenGL 的像素格式。
  • type参数:解释参数pixels指向的数据,告诉OpenGL 使⽤用缓存区中的什什么 数据类型来存储颜⾊色分量量,像素数据的数据类型。
  • data参数:指向图形数据的指针。

2. 在文件中读取纹理 glReadPixels

void glReadPixels(GLint x,GLint y,GLSizei width,GLSizei
height, GLenum format, GLenum type,const void * pixels);

  • x参数:矩形左下⻆角的窗⼝口坐标
  • Y参数:矩形左下⻆角的窗⼝口坐标
  • width参数:矩形的宽,以像素为单位
  • height参数:矩形的⾼高,以像素为单位
  • format参数:OpenGL 的像素格式。
  • type参数:解释参数pixels指向的数据,告诉OpenGL 使⽤用缓存区中的什什么 数据类型来存储颜⾊色分量量,像素数据的数据类型
  • pixels参数:指向图形数据的指针

3. 分配纹理理对象 glGenTextures

void glGenTextures(GLsizei n,GLuint * textTures);

  • GLsizei参数:指定纹理理对象的数量量
  • textTures参数:指针(指针指向⼀一个⽆无符号整形数组,由纹理理对象标识符填充)

4. 绑定纹理 glBindTexture

void glBindTexture(GLenum target,GLunit texture);

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

5. 设置纹理理参数

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);

  • target 参数: 指定这些参数将要应⽤用在那个纹理理模式上,⽐比如GL_TEXTURE_1D、GL_TEXTURE_2D、GL_TEXTURE_3D。
  • pname参数:指定需要设置那个纹理理参数
  • param参数:设定特定的纹理理参数的值

5.1 纹理参数 – 过滤⽅式

5.1.1 邻近过滤(GL_NEAREST)
邻近过滤就是选择中心点最接近纹理坐标的那个像素。
  • 1

在这里插入图片描述

5.1.2 线性过滤 GL_LINEAR

基于纹理坐标附近的纹理像素,计算出一个插值,近似出这些纹理像素之间的颜色。
在这里插入图片描述
两种过滤方式的比较:
在这里插入图片描述

5.2 纹理参数 – 环绕⽅方式

5.2.1 GL_REPEAT

OpenGL 在纹理理坐标超过1.0的⽅方向上对纹理理进⾏行行重复;
在这里插入图片描述

5.2.2 GL_CLAMP_TO_EDGE

环绕模式强制对范围之外的纹理坐标沿着合法的纹理单元的最后一行或者最后一列来进行采样。
在这里插入图片描述

5.2.3 GL_CLAMP_TO_BORDER

在纹理坐标在0.0到1.0范围之外的只使⽤用边界纹理单元。边界纹理单元是
作为围绕基本图像的额外的行和列,并与基本纹理理图像⼀起加载的。
在这里插入图片描述

5.2.4 GL_MIRRORED_REPEAT

将每次重复的图片镜像放置。
在这里插入图片描述

OpenGL像素格式

常用:GL_RGBA
在这里插入图片描述

OpenGL像素数据的数据类型

常用:GL_UNSIGNED_BYTE
在这里插入图片描述

不常用的函数

1.改变像素存储方式 glPixelStorei

void glPixelStorei(GLenum pname,GLint param);

  • pname参数:GL_UNPACK_ALIGNMENT 指定OpenGL 如何从数据缓存区中解包图像 数据
  • param参数:表示参数GL_UNPACK_ALIGNMENT 设置的值

2.恢复像素存储方式 glPixelStoref

void glPixelStoref(GLenum pname,GLfloat param);

  • pname参数:GL_UNPACK_ALIGNMENT 指定OpenGL 如何从数据缓存区中解包图像 数据
  • param参数:表示参数GL_UNPACK_ALIGNMENT 设置的值

3.更新纹理 glTexSubImage2D

*void glTexSubImage2D(GLenum target,GLint level,GLint xOffset,GLint yOffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid data);

4.插入替换纹理 glCopyTexSubImage2D

void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yOffset,GLint x,GLint y,GLsizei width,GLsizei height);

5. 在颜色缓存区中加载数据 glCopyTexImage2D

void glCopyTexImage2D(GLenum target,GLint level,GLenum
internalformt,GLint x,GLint y,GLsizei width,GLsizei height,GLint border);

6. 删除绑定纹理对象 glDeleteTextures

*void glDeleteTextures(GLsizei n,GLuint textures);

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

GLboolean glIsTexture(GLuint texture);

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号