问题描述
空间中的点可以通过(x,y,z)这样一个向量表示,每个分量分别代表向量在x轴,y轴和z轴上的取值(这里采用标准的正交坐标系,在谈论过程中不涉及左右手坐标系的差异问题,这里默认当做右手系来讨论)
空间中任何一个面都可以通过三角化操作来将一个完整的面分解成多个三角形面,这样的思路被应用于计算机图形学(这里需要了解网格mesh 相关的概念),计算机中没有直接曲面这样的基本图形(无法直接渲染),计算机通过将空间网格化,一个曲面可以通过三角化分解成多个三角形来转化成在网格模型中可以展示的模型。
在现在最常使用的DirectX和OpenGL 3D引擎中任何一个三角面的法线方向回收到创建三角面时输入的三个顶点的顺序影响,(这里忽略实际上的差异,假设引擎期望所有三角面的顶点都是沿着法线方向上顺时针方向给出的)。我们现在对一个已有的三角面做仿射变换时,三角面三个顶点的顺序可能被改变。
如果仿射变换改变了三角面顶点顺序,不调整顶点顺序的情况下,3D引擎在渲染面的时候会产生的错误法线方向,表现为一些表面被从正面观察看不到。
背景知识
仿射变换
一个三维空间中的仿射变换矩阵可以被表示为
TRANS=
RS T
0 1
RS时一个3*3的旋转缩放矩阵,T时一个3*1的偏移矩阵,0 是一个 1*3的0矩阵,1是1*1的单位矩阵。
仿射变换可以理解为对点现做一个旋转缩放,然后做一个平移操作,(具体顺序应该处于图形学的考虑,我也没有理解远离)