Libgdx使用findRegion从纹理图集获取纹理
我有这个密码Libgdx使用findRegion从纹理图集获取纹理,libgdx,Libgdx,我有这个密码 textureAtlas = TextureAtlas("atlas.atlas") val box = textureAtlas.findRegion("box") 我想用“盒子”创建一个纹理。可能吗?返回原始纹理,而不是区域化纹理。哦,我不想用雪碧和雪碧棒。我需要3D的,不是2D的 谢谢您可以这样做: Texture boxTexture = new TextureRegion(textureAtlas.findRegion("box")).getTexture(); 纹
textureAtlas = TextureAtlas("atlas.atlas")
val box = textureAtlas.findRegion("box")
我想用“盒子”创建一个纹理。可能吗?返回原始纹理,而不是区域化纹理。哦,我不想用雪碧和雪碧棒。我需要3D的,不是2D的
谢谢您可以这样做:
Texture boxTexture = new TextureRegion(textureAtlas.findRegion("box")).getTexture();
纹理实际上并没有把碎片分开。当你从atlas中获取区域时,它只是说这是你要使用的区域(u,v,u2,v2),这是整个纹理的原始参考 这就是为什么batch.draw(纹理)和batch.draw(纹理区域)在使用中不一样的原因 然而,将图片的一部分作为纹理是可能的
- 您可以使用pixmap来完成 首先从atlas纹理生成pixmap。然后创建新的空pixmap,大小为您想要的“box”区域。然后指定像素阵列并从新的像素贴图生成纹理
- 您可以使用帧缓冲区。 创建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将被y翻转。您可以通过将scaleY设置为-1来使用纹理绘制方法解决此问题,或者在帧缓冲区上绘制时将scaleY缩放为-1,或者可以像这样更改摄影机
up.set(0, -1, 0);
direction.set(0, 0, 1);
在y轴上翻转到摄影机
我最后想到的是这个纹理。它也没那么难
texturefbo.bind();
Gdx.gl.glGenerateMipmap(GL20.GL_TEXTURE_2D);
texturefbo.setFilter(Texture.TextureFilter.MipMapLinearLinear,
Texture.TextureFilter.MipMapLinearLinear);
如果在3D中使用,则没有理由使用TextureAtlas。您无法从TextureRegion提取纹理,因此您需要直接使用Pixmap并从源图像文件的某个区域创建新的Pixmap,或者对网格执行一些奇特的UV操作以使其使用该特定区域。这是整个纹理,而不是区域纹理,我想我必须为此创建一个自定义着色器