所以多亏了这个董事会的许多回复,我对一些内幕的内容有了更好的了解,但我只需要更多一点来获得一个坚定的理解。所以我在这里阅读Riemer的部分教程:
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)
所以我的问题是这些:
Riemer说:
1:如果我们只是渲染图像 喜欢它(或者:与身份 转换),它将被渲染 在左上角的原始大小 屏幕的一角。
2:首先,移动托架图像,使其左上角位于SpriteBatch.Draw方法中指定为第二个参数的位置。
4:最后,这是最具挑战性的一步:图像在Y轴上移动,因为在我们的SpriteBatch.Draw方法中,我们指定了(0,carriageTexture.Height)作为原点。非常重要:它在自己的Y轴上移动,已经缩小。因此,不是移动超过39个屏幕像素,托架将垂直移动超过39 * 0.4 = 16像素像素(因为carriageTexture.Height = 39和playerScaling = 0.4)。
好的,所以我们一直在世界/屏幕空间中使用这些矩阵进行定位。当你缩小某些东西时,我不明白为什么现在它将根据对象的局部空间开始移动。例如,我们的第一个翻译矩阵根据世界/屏幕空间移动,但现在他声明“它在自己的Y轴上移动”。
为什么单位矩阵是可选的?
因此,我无法将绘制方法与这些矩阵乘法联系起来,对于世界原点的对象的处理是什么以及创建翻译为何改变了它的行为。
答案 0 :(得分:1)
1.1:此系统默认在左上角绘制图像。并非所有系统都是这样的,因此值得在文档中指出。因此,如果没有应用任何转换(或者只有标识一,它没有做任何事情),它将在左上角绘制。
2.1:在第2行应用转换后,它将在屏幕上翻译(移动)图像xPos,yPos。如果发生这种情况并不重要,但它可能会在抽奖时由显卡应用。
4.1:不,你一直都是在当地空间定位。直到第3行,本地空间与全球空间的大小相同。现在缩放了本地空间,因此也可以缩放翻译。
4.2:大多数系统将矩阵初始化为单位矩阵。根据定义,单位矩阵不会做任何事情(如果你将它与矩阵A相乘,你将再次获得矩阵A)。所以,如果你省略它,那没关系。它对于显式或稍后重置矩阵很有用。