OpenGL教学 | 3.了解纹理,给图形添加纹理

本文介绍了OpenGL中纹理的相关知识,包括纹理的环绕方式如GL_REPEAT、GL_MIRRORED_REPEAT和GL_CLAMP_TO_EDGE,过滤方式如GL_NEAREST和GL_LINEAR,以及多级渐远纹理(Mipmap)的作用和使用。此外,还讲解了如何加载与创建纹理,以及如何应用和混合多个纹理。
摘要由CSDN通过智能技术生成

本篇将学习OpenGL中关于纹理的各种知识。纹理就是图片,用于给模型添加细节。

个人博客食用体验更佳:文章链接

纹理环绕方式

如果我们把纹理坐标设置在范围之外会发生什么?OpenGL默认的行为是重复这个纹理图像。下面更多的选择:

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

设置坐标轴环绕方式(s、t(如果是使用3D纹理那么还有一个r))

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选项,需要指定一个边缘的颜色。

float borderColor[] = {
    1.0f, 1.0f, 0.0f, 1.0f };
glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, borderColor);

纹理过滤

如何将纹理像素(Texture Pixel)映射到纹理坐标,让分辨率清晰

纹理过滤有很多个选项,但是现在我们只讨论最重要的两种:

GL_NEAREST

邻近过滤 (Nearest Neighbor Filtering):

选择中心点最接近纹理坐标的那个像素

img

GL_LINEAR

线性过滤 (linear Filtering):

基于纹理坐标附近的纹理像素,计算出一个插值 (心距离纹理坐标越近,贡献越大)

img

效果对比

img

我们可以在纹理被缩小的时候使用邻近过滤,被放大时使用线性过滤。方法:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

多级渐远纹理

(Mipmap):一系列的纹理图像,后一个纹理图像是前一个的二分之一。

功能:提升真实性、提升性能。

img

过滤方式 描述
GL_NEAREST_MIPMAP_NEAREST 使用最邻近的多级渐远纹理来匹配像素大小,并使用邻近插值进行纹理采样
GL_LINEAR_MIPMAP_NEAREST 使用最邻近的多级渐远纹理级别,并使用线性插值进行采样
GL_NEAREST_MIPMAP_LINEAR 在两个最匹配像素大小的多级渐远纹理之间进行线性插值,使用邻近插值进行采样
GL_LINEAR_MIPMAP_LINEAR 在两个邻近的多级渐远纹理之间使用线性插值,并使用线性插值进行采样

设置方法:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值