2011-03-19 81 views
2

我想搭建一个2.5引擎与XNA。基本上,我想在3D背景中显示2D精灵(主要英雄和其他怪物)。游戏将成为一个平台。 现在,使用精灵上的平移矩阵不会产生在世界空间中平移顶点几何的相同结果。 我的意思是,如果我申请如何将Sprite和顶点的几何图形转换为相同的距离?

Matrix.CreateTranslation(new Vector3(viewportWidth/2, viewportHeight/2, 0)); 

精灵将在屏幕的中间转换(从显示器左上角原点开始)。但是,如果我将相同的变换应用于世界空间中的立方体,它将转化得很远。这并不让我感到惊讶,但我想要将Sprite和3D对象以相同的距离进行翻译,忽略所有项目/未预计的coord内容。

谢谢!

回答

1

传统上有三个矩阵:世界,视图和项目。

BasicEffect和大多数其他3D效果,只是具有这些矩阵。您可以使用Project来定义点从三维世界投影到二维视口(视区左下角(-1,-1)到右上角(1,1))的投影方式。您可以设置视图以在世界空间中移动相机。你用World来移动你的模型在世界空间。

SpriteBatch有点不同。它有一个隐含的Project矩阵,它使您的世界空间与视口的客户端空间(左上角的(0,0)和右下角的(宽度,高度))匹配。您可以将transformMatrix矩阵传递给Begin,您通常可以将其视为像View矩阵。然后你传递给Draw(位置,旋转,比例等)的参数就像World矩阵那样工作。

如果您需要在SpriteBatch中为您的世界或项目矩阵做“奇怪”的事情,您可以将这些转换生成到您的transformMatrix。它可能只涉及一些数学来“撤销”内置的转换。

在XNA 4也可以直接在SpriteBatch使用Effect(如BasicEffect),其可以用任意的矩阵(details)提供。

+0

谢谢!我会试一试! – Archedius 2011-03-19 13:56:30

相关问题