PBRT中惯用左手坐标系,包括设置了transformSwapsHandedness表示是不是变换中换了坐标系。
为什么需要变换坐标系呢?
更多内容请见我的系列书:dezeming.top/
我想到一个有趣的比喻,们可以想象,比如我们照镜子,我们的左脸有一颗痣,我们无论怎么把人旋转平移和缩放,哪怕摄像机的位置也进行了旋转和平移,但你的痣还是在左脸上。
但是对于计算机模型,我们可以通过计算让你的痣显示在右脸上:可以把你进行对称变换,经过对称变换以后,你的痣就在右脸上了:
对称变换其实就是坐标系变了。
对称变换其实就是坐标系变了,比如本来三角形的三个点是(1,1,1),(2,3,1),(7,2,5),叉积得到的法向量方向为:
Point3f p0(1,1,1),p1(2,3,1),p2(7,2,5);
Vector3f N = Cross((p1-p0),(p2-p0));
得到N的结果是(8,-4,-11)
我们将法向量沿着z轴做个对称(相当于左手坐标系变换到右手坐标系):
Point3f p0(1,1,-1),p1(2,3,-1),p2(7,2,-5);
Vector3f N = Cross((p1-p0),(p2-p0));
得到结果为(-8,4,-11)。但问题是我们只是让z轴做了个对称,因此变换后物体的法向量应该是(8,-4,11)才对,所以说相当于所有坐标值需要取负。