OpenGL开发-第6章-纹理,让物体更漂亮

本文详细介绍了OpenGL中纹理的使用,包括为什么使用纹理、纹理采样与纹理环绕、如何将纹理应用到物体上,以及如何加载和使用纹理。通过纹理映射,可以使3D图形更加丰富和真实。
摘要由CSDN通过智能技术生成

代码仓库

点击这里

1.为什么使用纹理

在之前的章节中,我们绘制了一个矩形,给了它特定的颜色,也通过矩阵操作了它平移旋转。但无论是炫酷的3A大作,还是简单的益智游戏,都是很漂亮,很有设计感的。单纯通过给顶点颜色,几乎很难做到,那么我们可以通过给这个矩形贴上一张图片,让他变得华丽起来。比如我的一个场景(可看这里的视频):
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gfyjvkX3-1623148877864)(https://oscimg.oschina.net/oscnet/up-f4dcd721a39d5639cc2aa941ee60b5fad5c.png)]
上图中,背景的图片,圆形的图片,小雨滴,甚至81192这几个字也是图片,也就是纹理。它几乎无处不在,极大的丰富我们的画面。

2.纹理采样与纹理环绕

纹理坐标在几何上是连续的,而片段或者像素是离散的,当我们要将坐标映射到纹理上,从纹理上去除颜色值给OpenGL,就是采样的过程。

  • 3.1 采样/纹理过滤
    OpenGL中的过滤方式由多种,常用的两种:GL_NEAREST和GL_LINEAR。
    GL_NEAREST(最近邻):

    从图上可以看出,要采样这个坐标的颜色,在GL_NEAREST模式下,会找一个离他最近的一个中心点的颜色,来作为最后的结果。
    GL_LINEAR(线性插值):

    线性插值的情况下,会找周围相邻的几个点的颜色,做一个平均。当然也不是绝对的平均,会根据距离做加权平均。也不一定是选取周围4个,这些值不固定,与算法实现有关系,但道理是相通的。
    两种过滤方式,会产生明显的差别,可以参看如下图示:

    在OpenGL中可以很简单的设置:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  • 3.2 纹理环绕
    OpenGL规定纹理坐标的范围是[0,1],如果超过了怎么办呢?
    实际中我们见过很多这种情况,铺地板。假如每块地板都是一个纹理,不停的铺同一种地板就是一种纹理环绕方式:重复。参看如下图示:

    OpenGL提供多种环绕方式:
    GL_REPEAT 重复纹理图像。 这是OpenGL的默认选项。
    GL_MIRRORED_REPEAT 也是重复,但是图片被镜像了。
    GL_CLAMP_TO_EDGE 超出的部分全都用边缘的颜色代替。
    GL_CLAMP_TO_BORDER 超出的部分用户自己指定颜色。
    看下图:

    在OpenGL中我们可以这样设置:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT);

如果自己设置颜色,则可以通过这样设置:

float borderColor[] = {
   
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值