LearnOpenGL 1.5 纹理

本文详细介绍了OpenGL中的纹理技术,包括纹理环绕方式、过滤方法、多级渐远纹理的使用,以及如何加载、创建和应用纹理。通过设置不同的纹理环绕模式和过滤方式,可以实现平滑或锐利的纹理显示效果。同时,多级渐远纹理有助于提高渲染性能。最后,文章还讲解了如何在片段着色器中使用纹理单元来管理多个纹理。
摘要由CSDN通过智能技术生成

纹理 Textures

本文整理自LearnOpenGLLearnOpenGL CN ,后者为前者的中文版, 完整学习的话建议前往原网站。

纹理是一个2D图片(甚至也有1D和3D的纹理),它可以用来添加物体的细节。就像一张纸,可以无缝贴在你创建的物体上。

除了图像以外,纹理也可以被用来储存大量的数据,这些数据可以发送到着色器上。

为了能够把纹理映射(Map)到三角形上,我们需要指定三角形的每个顶点各自对应纹理的哪个部分。这样每个顶点就会关联着一个纹理坐标(Texture Coordinate),用来标明该从纹理图像的哪个部分采样。之后在图形的其它片段上进行片段插值(Fragment Interpolation)。
纹理坐标在x和y轴上,范围为0到1之间。

如图,设置三角形左下角纹理坐标为(0,0)等。将坐标设置传递给顶点着色器,她们就会被传递给片段着色器,进行插值计算。
例子

GLfloat texCoords[] = {
    0.0f, 0.0f, // 左下角
    1.0f, 0.0f, // 右下角
    0.5f, 1.0f // 上中
};

需要自己设置采样方式。

纹理环绕方式

当纹理坐标超出范围([0,1])时,OpenGL的环绕方式:

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

效果分别为

每个选项都可以使用glTexParameter*函数对单独的一个坐标轴设置(s、t(如果是使用3D纹理那么还有一个r)它们和x、y、z是等价的):

//参数依次为纹理目标,坐标轴,环绕方式
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT);

选择GL_CLAMP_TO_BORDER选项,我们还需要指定一个边缘的颜色。这需要使用glTexParameter函数的fv后缀形式,用GL_TEXTURE_BORDER_COLOR作为它的选项,并且传递一个float数组作为边缘的颜色值:

float<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值