XNA spritebatch矩阵缩放超过1会导致背景无法绘制

时间:2013-09-10 05:36:34

标签: c# matrix xna draw scalar

我的游戏场景中有2个游戏对象,一个角色精灵和一个背景精灵。我将标量矩阵传递给spritebatch.begin参数,当缩放1或更低时,一切都很好。但是当我缩放到1以上时,我的背景图像不会绘制(角色精灵仍然会这样做)。背景和角色都有完全相同的代码(除了位置,图像文件等)。

矩阵:

ViewMatrix = Matrix.CreateScale(1.5f); //Anything 1 or below works fine.

我希望我能提供更多信息,但我不知道要提供什么......我尝试在网上搜索类似的问题并且没有找到任何信息。

1 个答案:

答案 0 :(得分:2)

使用Matrix.CreateScale(1.5f, 1.5f, 1f) - 基本上:不要缩放Z轴。


GPU栅格区域在(-1, -1, 0)(1, 1, 1)的范围内。仅渲染落入此卷的片段(像素)。 Z轴是深度缓冲区的范围。传统上,投影矩阵会将您的场景投射到此空间中。

SpriteBatch相当于投影矩阵将您的场景置于“客户端空间”(原点左上角)并将其投影到此空间。但它只留下了Z轴。

默认情况下,SpriteBatch不使用深度缓冲区。但它仍然为每个精灵四边形提供一个Z位置,由layerDepth参数指定为SpriteBatch.Draw

在精灵四元组位于SpriteBatch.Begin之后,以及投影之前,应用Draw中指定的变换。

通常layerDepth的有效范围介于0和1之间(因为它属于光栅体积)。但是,如果您应用修改精灵Z轴的自定义变换,layerDepth的有效范围将会改变。