OpenGL之纹理的常用方法

常用函数

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)
邻近过滤就是选择中心点最接近纹理坐标的那个像素。

在这里插入图片描述

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenGL球面纹理贴图是一种在球体上应用纹理的技术。在OpenGL中,为了使用球面纹理贴图,我们需要首先创建一个球体模型。这可以通过绘制一系列的三角形面片来实现,形成一个球体的表面。接下来,我们需要为球体模型创建一个纹理对象,并加载对应的纹理图像。 在加载纹理图像之后,我们需要设置一些纹理参数,例如缩小过滤和放大过滤的方式。然后,我们可以使用OpenGL纹理映射功能来将纹理图像应用到球体上的各个面片上。 在球面纹理贴图的过程中,需要将纹理坐标映射到球体的表面上。一种常用方法是使用球坐标系来表示纹理坐标。球坐标系包括两个角度参数:纹理纬度和纹理经度。纹理纬度决定了纹理在球体上的垂直位置,而纹理经度则决定了纹理在球体上的水平位置。 在绘制球体的过程中,我们需要为每个顶点指定纹理坐标。可以根据对应的球面坐标来计算纹理坐标,并将其与顶点一起传递给着色器。在着色器中,可以使用纹理坐标来对纹理进行采样,并将采样到的纹素值与球体的法向量进行组合,从而得到最终的颜色值。 通过这种方式,我们可以在球体表面上实现复杂的纹理图案,例如地球表面的地形、云层等效果。同时,球面纹理贴图还可以应用于球体的各个部分,实现不同部分具有不同纹理的效果。 总而言之,OpenGL的球面纹理贴图技术可以使我们在球体上实现各种有趣的纹理效果,扩展了实时渲染的创作可能性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值