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

XNA中的这种旋转行为是什么?,xna,Xna,我刚从XNA出发,有一个关于旋转的问题。当你用XNA中的旋转矩阵乘以一个向量时,它是逆时针的。这我理解 然而,让我给你一个例子,我没有得到什么。假设我将随机艺术资产加载到管道中。然后,我创建了一些变量,以便在更新方法运行时将每帧增加2弧度(testRot+=0.034906585f)。我最困惑的是,资产在这个屏幕空间中是顺时针旋转的。这让我很困惑,因为旋转矩阵会逆时针旋转向量 还有一件事,当我指定位置向量的位置以及原点时,我知道我是围绕原点旋转的。我是否也要假设有垂直轴穿过此资源的原点?如果是,

我刚从XNA出发,有一个关于旋转的问题。当你用XNA中的旋转矩阵乘以一个向量时,它是逆时针的。这我理解

然而,让我给你一个例子,我没有得到什么。假设我将随机艺术资产加载到管道中。然后,我创建了一些变量,以便在更新方法运行时将每帧增加2弧度(testRot+=0.034906585f)。我最困惑的是,资产在这个屏幕空间中是顺时针旋转的。这让我很困惑,因为旋转矩阵会逆时针旋转向量


还有一件事,当我指定位置向量的位置以及原点时,我知道我是围绕原点旋转的。我是否也要假设有垂直轴穿过此资源的原点?如果是,旋转从哪里开始?换句话说,我是从Y轴的顶部开始旋转还是从x轴开始旋转?

XNA SpriteBatch在客户端空间中工作。其中“up”是Y-,而不是Y+(如笛卡尔空间、投影空间以及大多数人通常选择的世界空间)。这使旋转显示为顺时针方向(而不是笛卡尔空间中的逆时针方向)。旋转产生的实际坐标相同

旋转是相对的,所以它们实际上不是从任何指定的位置“开始”

如果使用数学函数,如
sin
cos
atan2
,则绝对角度始终以零弧度从X+轴开始,正向旋转方向朝Y+旋转


SpriteBatch
的操作顺序如下所示:

  • Sprite以四元体开始,左上角为(0,0),其大小与其纹理大小相同(或
    SourceRectangle
  • 将精灵按其原点向后平移(从而将其原点设置为(0,0))
  • 缩放雪碧
  • 旋转精灵
  • 按位置平移精灵
  • 应用SpriteBatch.Begin中的矩阵
  • 这会将精灵放置在客户机空间中


    最后,对每个批处理应用一个矩阵,将该客户机空间转换为GPU使用的投影空间。(投影空间从视口左下角的(-1,-1)到右上角的(1,1)。

    由于您是XNA的新手,请允许我介绍一个库,它将在您学习时对您有很大帮助。它被称为XNA调试终端,是一个开源项目,允许您在运行时运行任意代码。因此,您可以查看您的变量是否具有您期望的值。所有这些都发生在游戏顶部的终端显示屏上,并且不会暂停游戏。可在以下网址下载:
    它是免费的,而且很容易设置,所以你真的没有什么损失。

    @llya-你可能应该接受其他问题的答案,这样其他人就会想回答你的问题。完成,全部接受。对不起,伙计们,忘了。哇,谢谢你们。解释得很好。我搜索了教程/书籍,他们所做的只是谈论这些,没有深入探讨。@llya:不客气。(注:别忘了投票并接受:)