TextureAtlas 实际上并没有分离碎片。当您从地图集获取区域时,它只是说这是您要使用的区域 (u,v,u2,v2),这是对整个纹理的原始引用。
这就是为什么 batch.draw(Texture) 和 batch.draw(TextureRegion) 在使用上不一样的原因。
但是可以将图片的一部分作为纹理。
由于您的 Textureatlas 大小,它可能非常昂贵。
- 您可以使用帧缓冲区。
创建 FBbuilder 并构建新的帧缓冲区。将纹理区域绘制到此缓冲区并从中获取纹理。
这里的问题是纹理的大小将与视口/屏幕大小相同。我想您可以创建新相机将其更改为您想要的大小。
GLFrameBuffer.FrameBufferBuilder frameBufferBuilder = new GLFrameBuffer.FrameBufferBuilder(widthofBox, heightofBox);
frameBufferBuilder.addColorTextureAttachment(GL30.GL_RGBA8, GL30.GL_RGBA, GL30.GL_UNSIGNED_BYTE);
frameBuffer = frameBufferBuilder.build();
OrthographicCamera c = new OrthographicCamera(widthofBox, heightofBox);
c.up.set(0, 1, 0);
c.direction.set(0, 0, -1);
c.position.set(widthofBox / 2, heightofBox / 2, 0f);
c.update();
batch.setProjectionMatrix(c.combined);
frameBuffer.begin();
batch.begin();
batch.draw(boxregion...)
batch.end();
frameBuffer.end();
Texture texturefbo = frameBuffer.getColorBufferTexture();
Texturefbo 将被翻转。您可以通过将 scaleY 设置为 -1 来使用纹理绘制方法解决此问题,或者您可以在帧缓冲区上绘制时将 scaleY 缩放为 -1,或者可以像这样更改相机
up.set(0, -1, 0);
direction.set(0, 0, 1);
翻转到y轴上的相机。
我想到的最后一件事是对这个纹理进行 mipmap。它也没有那么难。
texturefbo.bind();
Gdx.gl.glGenerateMipmap(GL20.GL_TEXTURE_2D);
texturefbo.setFilter(Texture.TextureFilter.MipMapLinearLinear,
Texture.TextureFilter.MipMapLinearLinear);