【发布时间】:2010-08-28 16:59:51
【问题描述】:
因此,多亏了这个董事会的许多回复,我对幕后的一些内容有了更好的理解,但我只需要再多一点点才能得到一个坚定的理解。所以我在这里阅读了 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)
所以我的问题是:
里默说:
1:如果我们只渲染图像 就像它一样(或:与身份 转换),它将被渲染 左上角的原始大小 屏幕一角。
- 我不知道这适用于什么情况。他只是指在抽签之前,所有图像都从世界原点0,0开始吗?或者他是说当这些转换生效时,对象的原点现在将被放置在左上角并转换回世界原点?
2:首先,移动车厢图像,使其左上角位于 SpriteBatch.Draw 方法中指定为第二个参数的位置。
- 好的,他是说这是在 draw 方法期间发生的事情的幕后情况,还是他只是传递与您发送给 draw 方法的参数相同的参数?
4:最后,这是最具挑战性的一步:图像在 Y 轴上移动,因为在我们的 SpriteBatch.Draw 方法中,我们已将 (0,carriageTexture.Height) 指定为原点。非常重要:它在自己的 Y 轴上移动, 已按比例缩小。因此,马车不会移动超过 39 个屏幕像素,而是垂直移动超过 39*0.4=16 像素像素(因为carriageTexture.Height = 39 和 playerScaling = 0.4)。
好的,所以我们一直在使用这些矩阵在我们的世界/屏幕空间中定位事物。当您缩小某些东西时,我不明白为什么它现在会开始根据对象的本地空间移动。例如,我们的第一个平移矩阵根据世界/屏幕空间移动,但现在他说“它在自己的 Y 轴上移动”。
为什么单位矩阵是可选的?
因此,我无法将 draw 方法与这些矩阵乘法连接起来,对象去世界原点的处理方式是什么,以及为什么创建转换会改变其行为。
【问题讨论】:
-
您可能还想在 creators.xna.com 论坛上问这个问题。
标签: xna linear-algebra