XNA 3.1具有不同变换矩阵的多个精灵?

时间:2011-06-10 22:55:58

标签: c# matrix xna

我有两种类型的物体,一种是2D,只会像平面图像一样直接面向前方,而另一种是3D,因此它会根据不同的旋转进行缩放和倾斜。所以SpriteBatch.Begin将矩阵应用于所有内容,直到我调用End。我在某处读过我应该调用Begin两次,一次绘制2D精灵,一次绘制3D对象,但我不知道如何更改矩阵以适应每个3D对象的需要而且我非常因为不记得链接是什么而感到难过。

所以我希望知道如何在不对每个对象调用BeginEnd的情况下执行此操作,因为这将是灾难性的。

1 个答案:

答案 0 :(得分:2)

此处的正确解决方案是不使用SpriteBatch进行3D绘图。 您应该开始使用实际的3D绘图API。

SpriteBatch仅仅是用于2D精灵绘图的3D API顶部的便利图层。例如,您可以编写自己的SpriteBatch的3D版本。

SpriteBatch范围内,无法为每个批次指定多个转换矩阵。因此,如果您必须有多个矩阵,则必须有多个批次(多个开始/结束块)。

如果您真的热衷于基于SpriteBatch的解决方案,那么可能就是这样做的 - 所以你可以尝试一下看看表现如何。

(你也可以做一个非常难看的黑客,你替换顶点着色器,以某种方式将3D转换数据打包到每个精灵中,然后在着色器中解压缩。丑陋。不要这样做。[编辑:也覆盖{4.0}之前的SpriteBatch顶点着色器是非常困难的XNA)