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

标签 xna

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

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

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

最佳答案

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

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

如果您正在使用 sin 等数学函数或 cosatan2 ,则绝对角度始终从 X+ 轴开始,弧度为零,正旋转方向向 Y+ 旋转。
SpriteBatch的操作顺序看起来像这样:

  • Sprite 以左上角为 (0,0) 的四边形开始,其大小与其纹理大小相同(或 SourceRectangle )。
  • 将 Sprite 按其原点平移回来(因此将其原点放置在 (0,0) 处)。
  • 缩放 Sprite
  • 旋转 Sprite
  • 按位置平移 Sprite
  • 应用 SpriteBatch.Begin 中的矩阵

  • 这会将 Sprite 放置在客户端空间中。

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

    关于xna - XNA 中的这种旋转行为是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3527531/

    相关文章:

    c# - 在 XNA 中实现可缩放并显示当前位置的 map 控件

    java - 当使用 Java Slick 2D 或 .NET XNA 框架时,用户输入如何保持独立于 FPS?

    c# - XNA 4 和外部引用

    audio - XNA SoundEffects类中“播放”和“恢复”之间的区别

    c# - 如何从Texture2D XNA c#获取颜色和坐标(x,y)?

    c# - 从网络摄像头抓取图像时,使用 XNA 渲染位图很慢,为什么?

    XNA MediaPlayer 加载音乐计时

    HLSL着色器的优化

    c# - XNA-如何计算二维圆相互碰撞后的速度?

    opengl - XNA, 直接 X , OpenGL