9.1 三角形内部插值计算
1、重心坐标定义
(1)基础定义
(2)面积角度求解
上述公式中,三角形内任意一个点的系数可以由面积比得到。
当这个点是重心坐标时,是等面积的三角形
2、纹理的应用
重心坐标在图形学中最重要的运用便是插值,他可以根据三个顶点A,B,C的属性插值出任意点的属性,无论是位置,颜色,深度,法线向量等等,而这些属性在之后的着色或是消除隐藏曲面都有很大的作用。
判断一个点是否在三角形内,完全可以用本节的重心坐标是否都大于0来代替之前的叉乘(其实二者一定程度上是等价的)。利用该条件来进行sample 再判断是否画出该像素。
怎么确定像素所在纹理的区域呢?
下图左边是屏幕上的像素,以左下红色点为例;右侧是纹理图。
找到该像素点的上方邻居与右侧邻居的像素点对应右侧uv纹理图对应的uv纹理点。
计算到上方点的距离 与 到右侧点的距离,取最大值为L。
在纹理点取边长为L的正方形作为该点的区域。
获得区域后,怎么拿这个区域与计算好的mipmap对应呢?
如果该区域是1 * 1,无须进行mipmap,直接将计算好1 * 1的纹理放上去。
如果该区域是4 * 4,上一层是2 * 2,上一层是1 * 1,有则将计算好1 * 1的纹理放上去。
根据区域找到对应级的mipmap,具体是log2(L)层上查询。
三线性插值:
左侧双线性一次(D层)、右侧双线性一次(D+1层)、
合起来一次单线性(层与层之间得到连续的值)。
3、各向异性过滤
定义:在不同的方向看,得到的形状不一样。
上面的mipmap方法是基于各个方向等同压缩的方式,但是也可能如下图。在第一行的是仅在水平方向上被压缩,在第一列是仅在垂直方向上被压缩。此时采用等比压缩则不合适。
可实现在矩形上被压缩。
屏幕上的某一点映射到的纹理可能是一个形状不一的矩形。
EWA过滤:任意形状的图形都可以拆成多个圆形,再进行多次查询即可。
4、环境光贴图
可用纹理表示出环境光
光照信息存在球面
光照信息存在立方体内(解决扭曲情况)
5、纹理应用于物体表面的凹凸
(1)法向贴图 normal mapping
沿法线方向上下移动,可以避免增加三角形(避免复杂)。
但是实际上三角形没有改变,只是计算并应用了凹凸情况下的虚拟法线的纹理的计算。
应用凹凸贴图改变法向实际上是重新计算点p处的法向为方向n,但是怎么重新计算n呢?
求法向的方法:假设原来的法向是垂直向上的(0,1),求梯度为求导公式,c为常数系数。
梯度的右上角向量坐标是(1,dp),应用旋转矩阵旋转90度,得(-dp,1)
(x,y)坐标逆时针旋转90度,应用旋转矩阵,得(-y,x)
(2)位移贴图--displacement mapping--更现代化的做法
都会定义一个高度差,增加一些三角形,然后真的做位移。
左侧的没有增加三角面,边缘位置变化不明显并且不会造成阴影。
右侧要求三角形比较细。
可以做动态的曲面细分
6、三维纹理
应用柏林噪声?
7、阴影信息计算
事先将一些阴影信息计算好在纹理贴图上