这篇算作是第一篇文章,以后觉得闲了就写点自己最近所想的也蛮好。
左右手坐标系是图形学中比较纠结的一件事,D3D中左右手坐标系两套API都有,OpenGL中是右手坐标系,在shader中是向量右乘的,即坐标变换的时候,是M·v,此时translation向量在矩阵M的最后一列,这个和OpenGL的列存储没啥关系,看到有的文章写是因为OpenGL列存所以右乘会快,我觉得这个说的不太对。左手坐标系对应着的是 X x Y = Z, Y x Z = X, 是轮换的,右手坐标系与之相反,是Y x X = Z,直接做好右手坐标系,再将X的位置反转一下也能够得到左手坐标系。
在视口坐标中,我们其实是处在左手坐标系的。可以这样考虑这个事情,右手部分对应着的是X轴正方向,左手部分对应着的是X轴负方向,看向的是Z轴正方向,天空的方向是Y轴正方向,这是一个左手坐标系。而在OpenGL中,对应着的API使用的都是右手坐标系,如果自己管理变换矩阵的话,在视点坐标变换的时候需要变到左手坐标系。很多地方都不讲这个问题,我觉得这对于我来说很困惑。在变换的时候,统一按照右手坐标系去考虑就好了,也就是在世界坐标和模型坐标的时候使用的右手坐标系,这个有个很好玩的事情就是,右手坐标系的正,在左手坐标系看来也是正的。
读完规定自己读好的书之后就离开这里,希望能够做好手头的事情,一点点进步吧~