gpt4 book ai didi

java - 将TextureRegion翻转为纹理

转载 作者:行者123 更新时间:2023-12-02 11:31:41 24 4
gpt4 key购买 nike

我正在使用 FBO 并尝试翻转 y 轴上的纹理。我记得我可以使用TextureRegion.flip()来做到这一点。

但是,当我尝试翻转时,它不起作用。

    GLFrameBuffer.FrameBufferBuilder frameBufferBuilder = new GLFrameBuffer.FrameBufferBuilder(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
frameBufferBuilder.addColorTextureAttachment(GL30.GL_RGBA8, GL30.GL_RGBA, GL30.GL_UNSIGNED_BYTE);
FrameBuffer frameBuffer = frameBufferBuilder.build();
frameBuffer.begin();
Gdx.gl.glClear(GL30.GL_COLOR_BUFFER_BIT | GL30.GL_DEPTH_BUFFER_BIT | (Gdx.graphics.getBufferFormat().coverageSampling ? GL30.GL_COVERAGE_BUFFER_BIT_NV : 0));
batch.begin();

if (textures[1] != null) {
batch.draw(textures[1], x + marginx[1], y + marginy[1]);
}

batch.end();

frameBuffer.end();

Texture texturefbo = frameBuffer.getColorBufferTexture();
framebuffer.dispose();
textreg = new TextureRegion(texturefbo);
textreg.flip(false, true);
texturedraw = textreg.getTexture();

我知道我可以使用TextureRegion代替Texture,但我仍然想了解为什么从textureregion转换为texture而不传输uvu2v2。

最佳答案

翻转纹理区域不会对其所属的纹理执行任何操作。纹理对象不包含任何 UV 数据。它只是一个图像,仅此而已。当您将纹理传递给 SpriteBatch.draw(Texture) 时,SpriteBatch 在内部使用 UV 将其拉伸(stretch)到 X 右和 Y 上的矩形。例如,您还可以将负宽度传递给重载的 SpriteBatch.draw() 方法以水平翻转它。翻转对Texture对象没有影响,只影响SpriteBatch的内部绘图数据。

此外,如果您处理掉拥有该纹理的 FrameBuffer,则不能保证您的纹理能够正常工作。事实上,我认为根本不应该。

如果您确实需要翻转纹理,您可以执行其中之一。

  1. 提前翻转源图像。
  2. 将图像作为 Pixmap 加载,迭代像素以将它们绘制到相反行中的另一个 Pixmap,处理第一个 Pixmap,最后将第二个 Pixmap 传递到纹理构造函数中。
  3. 如果纹理不是来自图像文件,您可以使用 GLUtils 将像素从纹理对象复制到 Pixmap,然后执行步骤 2。

当然,2和3比简单地使用翻转的TextureRegion要复杂得多。

关于java - 将TextureRegion翻转为纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49246028/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com