2010-08-28 64 views
1

所以,感谢这个委员会的许多回复,我对引擎盖下的某些内容有了更好的理解,但我只是需要更多一点才能得到一个明确的理解。因此,我通过里默的教程部分阅读这里:XNA和矩阵

http://www.riemers.net/eng/Tutorials/XNA/Csharp/Series2D/Coll_Detection_Matrices.php

我会用马车例子,因为它是相当简单的。

因此该系列的马车转换是这样的:

1: Matrix.Identity; 
2: Matrix.CreateTranslation(xPos, yPos, 0) 
3: Matrix.CreateScale(playerScaling) 
4: Matrix.CreateTranslation(0, -carriage.Height, 0) 

所以我的问题是:

里默说:

1:如果我们只是渲染图像(或:与身份 变换),它将被渲染为 在其左上的原始大小 屏幕的一角。

  1. 我不明白这是适用的上下文。他只是指在绘制之前,所有图像都从0,0的世界原点开始?或者他说,当这些转变生效时,物体的起源现在将被放置在左上角并被转回到世界起源?

2:首先,在滑架的图像被移动以便它的左上点在指定为SpriteBatch.Draw方法第二个参数的位置。

  • 好,所以他说这是引擎盖的抽签方法的过程中会发生什么情况下会发生什么,或者他只是路过相同的参数,你发送给什么画法?
  • 4:最后,这是最有挑战性的步骤:在图像上移动的Y轴,因为在我们的方法SpriteBatch.Draw我们指定(0,carriageTexture.Height)为原点。非常重要:它被移动到它自己的Y轴,已被缩小。因此,不要移动超过39个屏幕像素,滑块将会垂直移动超过39 * 0.4 = 16像素像素(因为carriageTexture.Height = 39且playerScaling = 0.4)。

  • 好了,我们一直在使用定位在我们的世界/屏幕空间这些矩阵的事情。当你缩小某些东西时,我不明白它为什么会根据物体的局部空间开始移动。例如,我们的第一个平移矩阵根据世界/屏幕空间而移动,但现在他声明“它在它自己的Y轴上移动”。

  • 为什么身份矩阵是可选的?

  • 因此,我有连接回抽签方法与这些矩阵乘法,用什么样的对象走向世界起源的交易是,为什么创建翻译转移其行为的麻烦。

    +0

    您也可以在creators.xna.com论坛上提问这个问题。 – 2010-08-28 17:07:14

    回答

    1

    1.1:系统默认在左上角绘制图像。并非所有的系统都是这样的,所以值得在文档中指出。因此,如果没有应用任何转换(或者只有标识没有做任何转换),它将绘制在左上角。

    2.1:一旦你在第2行中应用了转换,它将在屏幕上转换(移动)图像xPos,yPos。当发生这种情况并不那么重要时,但它可能在绘图时被显卡应用。

    4.1:不,你一直在通过本地空间进行定位。直到第3行,局部空间与全球空间一样大小。现在,本地空间已缩放,因此翻译也将缩放。 4.2:大多数系统将矩阵初始化为单位矩阵。根据定义,单位矩阵不会做任何事情(如果您将其与矩阵A相乘,您将再次得到矩阵A)。所以如果你忽略它,那没关系。稍后显式或重置矩阵非常有用。

    +0

    那么绘制方法是否在缩放/旋转和平移时为我引擎盖下的变形?如果我首先使用矩阵进行缩放,然后在绘制中指定一个位置,则绘制是根据现在缩放的局部空间还是屏幕/世界空间进行移动? – Ilya 2010-08-28 17:37:34