我一直想知道如何实现spriteBatch中的变换矩阵。我创建了一个2D相机,变换矩阵如下:
if (needUpdate)
transformMatrix =
Matrix.CreateTranslation(-Position.X, -Position.Y, 0) *
Matrix.CreateScale(curZoom, curZoom, 1) ; needUpdate = false;
相机的效果和我想要的一样好,但我只是想知道变换是如何应用的:变换是否只影响精灵的轴,或者屏幕是否也会协调?
提前致谢!
答案 0 :(得分:5)
我看到你已回答了自己的问题,但为了提供完整的信息,SpriteBatch
提供了与传统世界观投影系统相似的界面。
SpriteBatch
类有一个隐含的投影矩阵,它接受视口的“客户端空间”中的坐标(左上角为(0,0),每个像素一个单位)并将它们放在屏幕上。
Begin
调用的重载接受转换矩阵,相当于用于移动相机的视图矩阵。
Draw
调用,虽然实际上没有使用矩阵,但允许您指定位置,旋转,比例等 - 相当于用于在模型中定位模型的世界矩阵场景(模型空间到世界空间)。
所以你从你的“模型”等价物开始 - 对于SpriteBatch
来说,它是纹理(或源矩形)大小的四元组(精灵)。绘制时,将四边形转换为其世界坐标,然后将其转换为视图坐标,最后将其转换为投影 coordinates。