如何将矩阵变换应用于单个Texture2D而不是整个SpriteBatch

时间:2017-02-20 16:31:18

标签: c# xna

我正在为XNA构建一个框架,用户可以使用层次结构模式来管理显示对象,这意味着父母的转换矩阵也会应用于子代。

用户可以设置平移,缩放和旋转,在组合转换和绘图时,内部转换为矩阵(用户也可以检索转换矩阵)。

SpriteBatch.Draw()方法没有任何以矩阵作为参数的重载,但我可以使用Matrix.Decompose()从连接矩阵中获取必要的组件。

现在的问题是,我决定允许用户直接设置单个对象的矩阵(而不是只读),这意味着用户可以应用更复杂的转换,例如倾斜。然而,具有这种变换的矩阵不能分解为平移,缩放和旋转,这意味着我不能再将变换信息传递给SpriteBatch.Draw()方法。

到目前为止,我找到的唯一解决方案是为每个单独的对象调用SpriteBatch.Begin(),将其连接矩阵作为参数传递。我确信这根本不是一个可用的解决方案,因为如果我开始并在每次调用Draw()时结束批处理,精灵批处理将不再是批处理。

tl; dr :如何为每个2D对象应用转换矩阵而不是组件,而不必为每个对象调用SpriteBatch.Begin()?< / p>

编辑:我不想满足于为屏幕上绘制的每个对象调用Begin()End()的解决方案。

0 个答案:

没有答案