用libgdx绘制纹理多边形

我使用libgdx的渲染周期有问题,基本上我需要用方形纹理填充一个区域,这个区域的最后一部分可能比纹理更小或者形状不同,所以这意味着我需要渲染任意形状的四边形并在其上拍打纹理,切割我不需要的部分。

基本上这是我需要绘制的多边形的形式

我对如何做到这一点有点迷茫,到目前为止我已经看到PolygonRegion和PolygonSpriteBatch可能会为我做这件事,但我有点担心实例化一个新的重物,我只会在一个物体上使用。

还有其他选择吗? 也许是Mesh课,但我想确定一下。

我建议使用Mesh来准确定义你想要的区域。 定义顶点并将它们映射到纹理坐标有点繁琐,但知道在某些更高级别的API(如*批处理位)下面发生了什么是很好的。 此外,* Batch API旨在分担在多个对象上上传单个纹理的权重,这听起来像在这种情况下可能不适用。 (另一方面,即使Batch对象有点“重量级”,实际上它们实际上可能不是问题。)

另一种需要考虑的方法是将对象渲染为方形网格,但要为区域外的所有像素定义具有透明像素的纹理。 (我假设非方形的形状是你可以离线知道的,并且不是动态的。)

如果为此目的实例化PolygonSpriteBatch,这不是一个大问题。 该对象主要包含缓冲几何的几何数据。 当然,您需要关心正确的渲染顺序,在需要时调用flush或end。

网格是另一种选择,但它可以更多一些工作,因为你需要手动提供顶点和纹理坐标。

从性能的角度来看,使用Mesh渲染一个精灵的速度稍快一些。 在你的情况下,我不确定差异是否会影响fps。

编辑:忘了提,如果你使用SpriteBatch渲染一个对象,不要使用默认构造函数,它会保留大量内存。