本文主要参考:LearnOpenGL CN - 纹理
纹理是一个2D/3D图像,可以用来为3D模型添加细节、颜色或者表面特征,而不需要增加额外的几何复杂度。
当3D渲染时,对于每一个顶点,如果使用纯色渲染,那么渲染出来的模型会非常单调,且失真严重。
如果使用顶点属性来设置颜色,那么每个顶点都需要设置颜色,这样会导致渲染出来的模型非常复杂,体积巨大。
使用纹理可以则可以把每一个顶点对应到纹理图片的每一个像素点,从而使渲染出来的模型更加逼真。
并且纹理是静态的,不需要在渲染时进行计算颜色值,所以可以提高渲染效率。
图片作为储存介质可以使用压缩算法,从而减少内存占用。
除了颜色,纹理还可以存储其它信息,比如法线、粗糙度、金属度等。
颜色纹理(Diffuse Map)
法线纹理(Normal Map)
高度纹理(Height Map)
环境遮蔽纹理(Ambient Occlusion Map)
金属度/粗糙度纹理(Metallic/Roughness Map)
(0,0) 到 (1,1)(0,0) 位于纹理的左下角::: warning 注意事项
::: info 环绕模式
当纹理坐标超出 [0,1] 范围时,OpenGL提供以下处理方式:
GL_REPEAT: 重复纹理图像GL_MIRRORED_REPEAT: 镜像重复纹理图像GL_CLAMP_TO_EDGE: 拉伸纹理边缘GL_CLAMP_TO_BORDER: 使用指定的边界颜色
:::纹理过滤定义了纹理在放大或缩小时的采样方式。
::: note 原理
::: note 原理
::: tip Mipmap过滤选项
GL_NEAREST_MIPMAP_NEAREST: 使用最邻近的mipmap级别,并执行邻近过滤GL_LINEAR_MIPMAP_NEAREST: 使用最邻近的mipmap级别,并执行线性过滤GL_NEAREST_MIPMAP_LINEAR: 在两个最邻近的mipmap之间线性插值,并执行邻近过滤GL_LINEAR_MIPMAP_LINEAR: 在两个最邻近的mipmap之间线性插值,并执行线性过滤
:::::: info 基本概念
sampler2D 采样器访问纹理
:::