OpenGL 纹理

OpenGL 纹理(Texture)是一种将图像或数据映射到 3D 模型表面的技术,用来为图形添加丰富的细节和真实感。

纹理 (Texture) :本质上是一个包含像素/纹素(Texel)的向量数组。最常见的是 2D 图像,也可以是 1D、3D 或立方体贴图。

纹理坐标 (Texture Coordinates):用于确定图像上哪一部分该映射到物体的顶点上。通常使用 (S, T) 或 (U, V) 表示,范围是归一化的 [0.0, 1.0](左下角为 (0,0),右上角为 (1,1))。

采样 (Sampling):片元着色器根据插值后的纹理坐标,从纹理对象中提取对应像素颜色的过程。

纹理环绕方式 (Wrapping):决定当纹理坐标超出 [0, 1] 范围时,OpenGL 如何绘制边缘(如 GL_REPEAT 重复、GL_CLAMP_TO_EDGE 边缘拉伸)。

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

纹理过滤 (Filtering):控制当物体放大或缩小、纹理像素与屏幕像素不匹配时的采样算法。 GL_NEAREST(邻近过滤):像素化风格,边缘硬朗。 GL_LINEAR(线性过滤):平滑过渡,边缘模糊。

多级渐远纹理 (Mipmap):预先计算并存储一系列分辨率逐渐降低的纹理副本,用于解决远距离物体产生视觉杂波和性能浪费的问题。

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

Related

OpenGL VAO and EBO

顶点数组对象(Vertex Array Object, VAO)可以像顶点缓冲对象那样被绑定,任何随后的顶点属性调用都会储存在这个 VAO 中。

OpenGL Graphics Pipeline

The OpenGL graphics pipeline is a sequence of processing steps that converts 3D vertex coordinates and data into a 2D colored image on your screen. It handles everything from transforming 3D models and applying lighting to rasterizing shapes and calculating individual pixel colors.

贝塞尔曲面

贝塞尔曲面是贝塞尔曲线向二维参数空间的扩展,通常通过两个方向的张量积(Tensor Product)定义。