我刚从 XNA 开始,有一个关于轮换的问题。当你在 XNA 中将一个向量乘以一个旋转矩阵时,它会逆时针旋转。这个我明白。
但是,让我举一个我不明白的例子。假设我将一个随机艺术 Assets 加载到管道中。然后,我创建一些变量,以在更新方法运行时将每帧增加 2 个弧度(testRot += 0.034906585f)。我的主要困惑是, Assets 在这个屏幕空间中顺时针旋转。这让我感到困惑,因为旋转矩阵会逆时针旋转矢量。
另一件事,当我指定我的位置矢量在哪里以及我的原点时,我知道我正在围绕原点旋转。我是否假设也有垂直轴穿过该 Assets 的原点?如果是这样,轮换从哪里开始?换句话说,我是从 Y 轴顶部还是从 x 轴顶部开始旋转?
最佳答案
XNA SpriteBatch 适用于 客户空间 .其中“向上”是 Y-,而不是 Y+(如笛卡尔空间、投影空间以及大多数人通常选择的世界空间)。这使得旋转显示为顺时针(而不是像在笛卡尔空间中那样逆时针)。旋转产生的实际坐标是相同的。
旋转是相对的,因此它们不会真正从任何指定位置“开始”。
如果您正在使用 sin
等数学函数或 cos
或 atan2
,则绝对角度始终从 X+ 轴开始,弧度为零,正旋转方向向 Y+ 旋转。SpriteBatch
的操作顺序看起来像这样:
SourceRectangle
)。 SpriteBatch.Begin
中的矩阵这会将 Sprite 放置在客户端空间中。
最后,将一个矩阵应用于每个批处理,以将该客户端空间转换为 GPU 使用的投影空间。 (投影空间从视口(viewport)左下角的 (-1,-1) 到右上角的 (1,1)。)
关于xna - XNA 中的这种旋转行为是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3527531/