据我所知,OpenGL使用右手坐标系,至少在剪辑空间中,它的工作方式如下:
这意味着,在不对用于转换的所有矩阵进行任何修改的情况下,世界空间坐标的工作方式如下:
如果我想更改它以使Z轴指向上方,该怎么办?我怎么能这样做?我想过将所有矩阵乘以一个旋转矩阵,只需将所有坐标移动90度,或者我可以在将数据发送到GPU后更改矢量的Y和Z分量,但这些看起来更像是变形而不是实际解决方案,如果为场景中的每个网格做完,它们也可能会对性能产生影响。有没有标准的方法来做到这一点?我错了吗?
答案 0 :(得分:1)
剪辑和NDC空间是左旋轴系统,而不是您定义的每个X,Y,Z轴。
您可以拥有多个轴系统。例如,一些“对象存储”使用左手系统。如果你是从OpenGL开始,尝试将所有东西设置在右手系统中,将更容易让你理解。
您的对象通常在其本地系统中定义(右手或非右手)。您可以通过“世界”矩阵放置它们。而且你从相机位置看到世界,它需要一个“视图”矩阵。然后你投射所有这些,另一个“proj”矩阵。
如您所见,矩阵随处可用。不要害怕他们。
从轴系统更改为另一个系统只是另一个矩阵。网络上有很多例子。