我的渲染周期使用libgdx时遇到问题,基本上我需要用方形纹理填充一个区域,这个区域的最后一部分可能比纹理更小或形状不同,所以这意味着我需要渲染任意形状的四边形并在其上拍打纹理,切割我不需要的部分。
我对如何做到这一点有点迷茫,到目前为止我已经看到PolygonRegion和PolygonSpriteBatch可能会为我做这件事,但我有点担心实例化一个新的重物我只能使用在一个对象上。
还有其他选择吗?也许是网格课,但我想确定。
答案 0 :(得分:1)
如果为此目的实例化PolygonSpriteBatch,这不是一个大问题。该对象主要包含缓冲几何的几何数据。当然,您需要关注正确的渲染顺序,在需要时调用flush或end。
网格是另一种选择,但它可以多做一些工作,因为你需要手动提供顶点和纹理坐标。
从性能的角度来看,使用Mesh渲染一个精灵的速度稍快一些。在你的情况下,我不确定差异是否会以某种方式影响fps。
编辑:忘了提一下,如果你使用SpriteBatch渲染一个对象,不要使用默认构造函数,它会保留很多内存。答案 1 :(得分:1)
我建议使用Mesh
来准确定义您想要的区域。定义顶点并将它们映射到纹理坐标有点繁琐,但知道在一些更高级别的API(如*批处理位)下面发生了什么是很好的。此外,* Batch API旨在分担在多个对象上上传单个纹理的权重,这听起来像在这种情况下可能不适用。 (另一方面,即使Batch对象有点“重量级”,实际上它们实际上可能不是问题。)
另一种需要考虑的方法是将对象渲染为方形网格,但要为区域外的所有像素定义具有透明像素的纹理。 (我假设非方形形状是你可以离线知道的东西,并且不是动态的。)