法线变换矩阵
经过模型变换后,法线也要跟着一起变换。假设物体发生了缩放形变,如果对法线应用相同的变换,可能会得到错误结果:
经过模型变换后,法线也要跟着一起变换。假设物体发生了缩放形变,如果对法线应用相同的变换,可能会得到错误结果:
三角形光栅化就是将三角面片覆盖的像素绘制出来,从而在屏幕上可见。有几个目标需要实现:
不重复的:不重复绘制像素,例如相邻的三角形之间公共边覆盖到的像素应当只被绘制一次。
无缝的:例如相邻的三角形之间光栅化出来应当是没有缝隙的,连续的。
对于2D空间三角形,假设三个顶点分别为\(\mathbf{a} ,\mathbf{b},\mathbf{c}\)。则2D空间任意点都可以被下式表示出来:
\[ \mathbf{p}=\mathbf{a}+\beta(\mathbf{b}-\mathbf{a})+\gamma(\mathbf{c}-\mathbf{a})\tag{1} \]
可以理解为\(\mathbf{a}\)为起点,向量\((\mathbf{b}-\mathbf{a})\)和\((\mathbf{c}-\mathbf{a})\)构成的基张成一个平面空间。
在介绍旋转之前,先分析一下两个概念:旋转和方向。方向即一个单位向量;旋转用来描述一个方向如何变换到另一个方向。在3维空间中,使一个方向变换到另一个方向的旋转有无数种,因为变换后的向量还可以绕以自己为旋转轴轴旋转。这意味着将旋转说成是一个方向变换到另一个方向的过程是不严谨的。准确地说,旋转描述的是坐标系到坐标系的变换。在3维空间中,只知道一个方向会变换到另一个方向,是无法唯一确定一个旋转的(当然也是可以构造出满足条件的旋转的,比如指定一个上向量)。
学习OpenGL的过程中想要实现一些效果,遇到的坑和找到的解决方案,记录一下。