XNA相机2D混淆

我已经按照教程在http://www.david-amador.com/2009/10/xna-camera-2d-with-zoom-and-rotation/执行我的2D相机,一切正常。 然而,这让我感到困惑。 从那个实现我看,首先有应用的翻译,然后旋转,然后缩放,然后再次翻译“抵消”相机。

但是,在我读的每一本书中,在使用matrix转换时都要记住一个核心原则,那就是应用转换的顺序。 这是不同的:规模,旋转,翻译。

我没有得到什么?

简答

SRT是世界matrix的通常顺序。 相机使用了一个视图matrix,它通过拍摄整个世界,并从相机所在的相反方向转换它。 由于这种操作是一个世界matrix的反面,所以乘法的顺序和它的论点都需要颠倒。

长答案

书中提到的SRT顺序是创建一个转换matrix来定位一个物体在世界中的正确顺序,换句话说,就是一个世界matrix

另一方面,您的2D相机课程正在创建一个几乎相反的视图matrix 。 更具体地说,它使整个世界与相机相反的方向移动,给人以错觉,相机是世界的新起源。

例如,如果你的摄像机位于(50,0)并向右旋转45º,那么模拟的方法就是对这个世界进行逆向变换,即把世界上所有的东西都翻译成(-50, 0),使摄像机位于(0,0),然后向左旋转45º,以产生相机向右旋转的错觉。

结论是,由于您正在执行作为世界matrix的逆运算,因此乘法顺序也需要反转。

与图片

不知道是否有帮助,但我试着拍几张照片来说明为什么顺序很重要,为什么有一个正确的顺序(虽然他们没有太好转..)。

首先为世界matrix。 设想一个方形物体位于(50,0),向左旋转45度,是其正常尺寸的两倍。 由于转换始终是相对于原点 ,下面的图像应该清楚地说明为什么SRT给出正确的结果,而TRS不能。

在这里输入图像描述

现在,正如我之前解释的那样,视图matrix的工作方式与世界matrix相反。 看看下面的图像,想象红色方框是相机。 视图matrix的工作是转换所有东西,以便将相机放置在原点,同时保持相机与世界之间的所有相对比例和位置。 显示的示例是视图matrix的正确转换顺序。

在这里输入图像描述

如您所见,TRS在这种情况下工作,并将相机放置在原点。 现在,如果您尝试使用SRT,而使用相同的参数,相机将远离不是我们想要的原点。

经过一番讨论后,我发现了一个不同的问题的答案,讨论了各种matrix操作顺序以及它们的用途。 虽然他们缺乏明确的细节,但他们是很好的参考

处理网格时的转换顺序