【问题标题】:What is this rotation behavior in XNA?XNA 中的这种旋转行为是什么?
【发布时间】:2015-11-22 00:06:38
【问题描述】:

我刚从 XNA 开始,有一个关于轮换的问题。当你在 XNA 中将一个向量乘以一个旋转矩阵时,它会逆时针旋转。这个我明白了。

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

另一件事,当我指定我的位置向量在哪里以及我的原点时,我知道我正在围绕原点旋转。我是否假设也有垂直轴穿过该资产的原点?如果是这样,轮换从哪里开始?也就是说,我是从 Y 轴顶部还是从 x 轴顶部开始旋转?

【问题讨论】:

  • @llya - 您可能应该接受其他问题的答案,以便其他人想要回答您的问题。
  • 完成,全部接受。抱歉各位,忘记了。

标签: xna


【解决方案1】:

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

旋转是相对的,因此它们不会真正从任何指定位置“开始”。

如果您使用sincosatan2 等数学函数,那么绝对角度 总是从X+ 轴开始为零弧度,正向旋转方向朝向Y+ .


SpriteBatch 的操作顺序如下所示:

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

这会将精灵放置在客户端空间中。

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

【讨论】:

  • 哇,谢谢伙计。解释得很好。我搜索了教程/书籍,他们所做的只是谈论这些而没有深入。
  • @llya:不客气。 (PS:不要忘记点赞和接受:)
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多