1

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

矩阵:

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

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

4

1 回答 1

2

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


GPU 光栅区域在 到 的范围(-1, -1, 0)(1, 1, 1)。仅渲染落在该体积中的片段(像素)。Z 轴是深度缓冲区的范围。传统上,投影矩阵将您的场景投射到这个空间中。

SpriteBatch的等效投影矩阵将您的场景置于“客户空间”(原左上角)并将其投影到该空间中。但它只留下 Z 轴。

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

中指定的变换在SpriteBatch.Begin精灵四边形被 定位之后Draw和投影之前应用。

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

于 2013-09-10T11:33:52.950 回答