XNA中的这种旋转行为是什么?

Ily*_*lya 6 xna

我刚刚开始在XNA中提出有关轮换的问题.当您将矢量乘以XNA中的旋转矩阵时,它会逆时针旋转.我明白了.

但是,让我举一个例子,说明我没有得到的.假设我将随机艺术资产加载到管道中.然后我创建一些变量,以便在更新方法运行时将每个帧递增2弧度(testRot + = 0.034906585f).我困惑的主要是,资产在这个屏幕空间顺时针旋转.这让我感到困惑,因为旋转矩阵将逆时针旋转矢量.

另外一件事,当我指定我的位置向量的位置,以及我的起源时,我明白我在旋转原点.我是否假设有垂直轴穿过该资产的来源?如果是这样,轮换从哪里开始?换句话说,我是从Y轴还是x轴的顶部开始旋转?

And*_*ell 11

XNA SpriteBatch在Client Space中工作."向上"是Y-,而不是Y +(如笛卡尔空间,投影空间,以及大多数人通常选择的世界空间).这使得旋转显示为顺时针(不像在笛卡尔空间中那样逆时针).旋转产生的实际坐标是相同的.

旋转是相对的,因此它们并不真正从任何指定位置"开始".

如果使用像sincos或等数学函数atan2,则绝对角度始终从X +轴开始为零弧度,正旋转方向向Y +旋转.


SpriteBatch看起来像这样的操作顺序:

  1. Sprite以四边形开始,左上角为(0,0),其大小与其纹理大小(或SourceRectangle)相同.
  2. 将精灵转换回原点(因此将其原点放在(0,0)处).
  3. 缩放精灵
  4. 旋转精灵
  5. 按其位置翻译精灵
  6. 应用矩阵 SpriteBatch.Begin

这会将精灵放在客户空间中.

最后,将矩阵应用于每个批次,以将客户空间转换为GPU使用的投影空间.(投影空间从视口左下角的(-1,-1)到右上角的(1,1).)