本文说明了纹理映射。
纹理映射
纹理映射也很简单,纹理是一张图像,纹理的左下角坐标为$(0, 0)$,右上角坐标为$(1, 1)$。在传入三角形三个顶点的时候传入坐标,渲染器会在片段着色器之前对其进行插值,从而得到对应的纹理坐标。
这里主要要实现的是gl shader
中的texture
函数。这个函数接收一个纹理和一个纹理坐标,并返回这个坐标上的颜色信息:
|
|
这里首先对纹理坐标Clamp
以确保其在$[0, 1]$中,然后对纹理进行采样,将数据返回。
这里做的是临近采样,纹理还有双线性插值法,即当你的纹理坐标为小数的时候(比如$(2.2, 2.3)$)这个时候如果直接转换为整数采样就是临近采样,而双线性插值则是要在x方向和y方向分别取最临近的点(这里是$(2, 2), (3, 2)$和$(2, 2), (2, 3)$,然后对x方向和y方向进行线性插值(比如x方向就是$color_{2,2}+(color_{3,2}-color_{2,2})*0.2$)以得到更加平滑的效果。