Spritebatch.Begin()转换矩阵

时间:2011-06-19 16:10:54

标签: xna

我一直想知道如何实现spriteBatch中的变换矩阵。我创建了一个2D相机,变换矩阵如下:

            if (needUpdate)
            transformMatrix =
               Matrix.CreateTranslation(-Position.X, -Position.Y, 0) *
                Matrix.CreateScale(curZoom, curZoom, 1) ; needUpdate = false;

相机的效果和我想要的一样好,但我只是想知道变换是如何应用的:变换是否只影响精灵的轴,或者屏幕是否也会协调?

提前致谢!

1 个答案:

答案 0 :(得分:5)

我看到你已回答了自己的问题,但为了提供完整的信息,SpriteBatch提供了与传统世界观投影系统相似的界面。

SpriteBatch类有一个隐含的投影矩阵,它接受视口的“客户端空间”中的坐标(左上角为(0,0),每个像素一个单位)并将它们放在屏幕上。

Begin调用的重载接受转换矩阵,相当于用于移动相机的视图矩阵。

Draw调用,虽然实际上没有使用矩阵,但允许您指定位置,旋转,比例等 - 相当于用于在模型中定位模型的世界矩阵场景(模型空间到世界空间)。

所以你从你的“模型”等价物开始 - 对于SpriteBatch来说,它是纹理(或源矩形)大小的四元组(精灵)。绘制时,将四边形转换为其世界坐标,然后将其转换为视图坐标,最后将其转换为投影 coordinates。