Creating on Orientation Matrix or Local Coordinate System
本文将基于目前所掌握的坐标系知识,基于 向量(Vector) 或者 法线(Normal) 构建局部坐标系。这是 渲染管线(renderer pipeline) 中常用来转换点或向量的坐标系的一种方式。核心思想是让点P上的法线成为局部坐标系的某一条轴,通常与向上的向量平齐,P点的 正切线(tangent) 和 双切线(bi-tangent) 分别作为局部坐标系的另外两条轴。如图:
构建局部坐标系的最佳方式是在平面上使用法线、正切线和双切线。这三个线所形成的坐标轴必须是正交而且是单位长度。在后续射线衍射的章节中,我们通常将入射点P的正切线命名为 dPdu,双切线命名为 dPdv,通过 dPdu 和 dPdv 的叉积可以得到点P上的法线。假设法线N表示向上的向量,正切线将为向右的向量,双切线为同时与法线和正切线垂直的向量。可以将上述三个向量在 [4 x 4] 矩阵中表示:
在使用该矩阵时需要留意 上下文(context),在处理 着色任务(shading tasks) 时。矩阵行的次序为:
此时法线位于矩阵的第三行。这是在着色相关领域遵循的惯例。
需要注意的是在列主序(column-major)的场景下(Scratchapixel 使用的都是行主序),向量的表达方式都为T, B, N列而不是T, B, N行。
取向矩阵 Orientation Martix
假设在认为任意空间下有一向量 ,然后乘以矩阵 M 得到向量
,向量
的坐标与我们由N, T, B定义局部坐标系相关,这一矩阵称为 取向矩阵(Orientation Matrix)。取向矩阵大部分场景用于着色。