左右坐标系和右手坐标系

659 阅读1分钟

PBRT中惯用左手坐标系,包括设置了transformSwapsHandedness表示是不是变换中换了坐标系。

为什么需要变换坐标系呢?

更多内容请见我的系列书:dezeming.top/

我想到一个有趣的比喻,们可以想象,比如我们照镜子,我们的左脸有一颗痣,我们无论怎么把人旋转平移和缩放,哪怕摄像机的位置也进行了旋转和平移,但你的痣还是在左脸上。

但是对于计算机模型,我们可以通过计算让你的痣显示在右脸上:可以把你进行对称变换,经过对称变换以后,你的痣就在右脸上了:

image.png

对称变换其实就是坐标系变了。

对称变换其实就是坐标系变了,比如本来三角形的三个点是(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)才对,所以说相当于所有坐标值需要取负。