我有两种类型的物体,一种是2D,只会像平面图像一样直接面向前方,而另一种是3D,因此它会根据不同的旋转进行缩放和倾斜。所以SpriteBatch.Begin
将矩阵应用于所有内容,直到我调用End
。我在某处读过我应该调用Begin
两次,一次绘制2D精灵,一次绘制3D对象,但我不知道如何更改矩阵以适应每个3D对象的需要而且我非常因为不记得链接是什么而感到难过。
所以我希望知道如何在不对每个对象调用Begin
和End
的情况下执行此操作,因为这将是灾难性的。
答案 0 :(得分:2)
此处的正确解决方案是不使用SpriteBatch
进行3D绘图。 您应该开始使用实际的3D绘图API。
SpriteBatch
仅仅是用于2D精灵绘图的3D API顶部的便利图层。例如,您可以编写自己的SpriteBatch
的3D版本。
在SpriteBatch
范围内,无法为每个批次指定多个转换矩阵。因此,如果您必须有多个矩阵,则必须有多个批次(多个开始/结束块)。
如果您真的热衷于基于SpriteBatch
的解决方案,那么可能就是这样做的 - 所以你可以尝试一下看看表现如何。
(你也可以做一个非常难看的黑客,你替换顶点着色器,以某种方式将3D转换数据打包到每个精灵中,然后在着色器中解压缩。丑陋。不要这样做。[编辑:也覆盖{4.0}之前的SpriteBatch
顶点着色器是非常困难的XNA)