XNA 精灵批处理矩阵缩放超过 1 会导致背景不绘制

本文关键字:背景 绘制 批处理 精灵 缩放 XNA | 更新日期: 2023-09-27 18:30:48

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

矩阵:

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

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

XNA 精灵批处理矩阵缩放超过 1 会导致背景不绘制

使用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范围将更改。