初学OpenGL(4):纹理

本文介绍了OpenGL中的纹理概念,包括纹理映射、纹理坐标、纹理环绕方式、纹理过滤和多级渐远纹理。讲解了如何将纹理应用到图形上,设置纹理坐标,以及选择合适的纹理过滤方式来提升视觉效果。此外,还提到了生成和应用纹理的步骤,以及如何在片段着色器中使用多个纹理单元进行混合。
摘要由CSDN通过智能技术生成

1、纹理是什么

    纹理(Texture)是一个2D图片(甚至也有1D和3D的纹理),它可以用来添加物体的细节;你可以想象纹理是一张绘有砖块的纸,无缝折叠贴合到你的3D的房子上,这样你的房子看起来就像有砖墙外表了。因为我们可以在一张图片上插入非常多的细节,这样就可以让物体非常精细而不用指定额外的顶点。

2、纹理的映射(Map)

    为了把纹理映射到我们的图形上,需要给每个顶点关联一个纹理坐标(Texture Coordinate),用来标明该从纹理图像的哪个部分采样(采集片段颜色)。之后在图形的其它片段上进行片段插值(Fragment Interpolation)。

    纹理坐标在x和y轴上,范围为0到1之间(注意我们使用的是2D纹理图像)。使用纹理坐标获取纹理颜色叫做采样(Sampling)。纹理坐标起始于(0, 0),也就是纹理图片的左下角,终始于(1, 1),即纹理图片的右上角。

    例如,我们给绘制的三角形如下的映射关系:


    我们为三角形指定了3个纹理坐标点。我们只要给顶点着色器传递这三个纹理坐标就行了,接下来它们会被传片段着色器中,它会为每个片段进行纹理坐标的插值。

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

3、纹理环绕方式(Wrapping)

    纹理坐标的范围通常是从(0, 0)到(1, 1),那如果我们把纹理坐标设置在范围之外会发生什么?OpenGL默认的行为是重复这个纹理图像(我们基本上忽略浮点纹理坐标的整数部分),但OpenGL提供了更多的选择:


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

    第一个参数指定纹理目标(我们当前使用的是2D纹理);第二个参数指定选项和纹理轴(WRAP选项,S\T轴);最后一个参数指定环绕方式。

    如果使用CLAMP_TO_BORDER的环绕方式,还需要设置边缘颜色。这时需要使用fv

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值