如何将Sprite和顶点几何体转换相同的距离?
我正在尝试搭建XNA 2.5引擎。 基本上,我想在3D背景中显示2D精灵(主要英雄和其他怪物)。 游戏将成为一个平台。 现在,在精灵上使用平移矩阵不会产生在世界空间中平移顶点几何的相同结果。 我的意思是,如果我申请
Matrix.CreateTranslation(new Vector3(viewportWidth / 2, viewportHeight / 2, 0));
精灵将在屏幕中间平移(从显示屏左上角开始)。 但是,如果我将相同的变换应用于世界空间中的立方体,它将转化得很远。 这并不让我感到惊讶,但我想要将Sprite和3D对象以相同的距离进行翻译,忽略所有项目/未预计的coord内容。
谢谢!
传统上有三个矩阵:世界,视图和项目。
BasicEffect
和大多数其他3D效果,只需使用这些矩阵。 您可以使用Project来定义点从三维世界投影到二维视口(视区左下角(-1,-1)到右上角(1,1))的投影方式。 您可以设置视图以在世界空间中移动相机。 你用World来移动你的模型在世界空间。
SpriteBatch
有点不同。 它有一个隐含的Project矩阵,它使您的世界空间与视口的客户端空间(左上角的(0,0)和右下角的(宽度,高度))匹配。 您可以将transformMatrix
矩阵传递给Begin
,您可以像View矩阵一样考虑这个矩阵。 然后,您传递给Draw
的参数(位置,旋转,比例等)像World矩阵那样工作。
如果您需要对SpriteBatch
World或Project矩阵执行“怪异”操作,则可以将这些转换生成到transformMatrix
。 它可能只涉及一些数学来“撤销”内置的转换。
在XNA 4中,您还可以直接在SpriteBatch
使用Effect
(如BasicEffect
),您可以使用任意矩阵(细节)。
上一篇: How to translate a sprite and a vertex geometry by the same distance?