LibGDX Генерация png из модели - PullRequest
0 голосов
/ 27 декабря 2018

В заголовке в значительной степени сказано все, мне нужно получить изображение из Model это возможно?Я искал это и ничего не нашел.

Решение благодаря @ retodaredevil

    FrameBuffer fbo   = new FrameBuffer(Pixmap.Format.RGBA4444, screenWidth, screenHeight, true);
    ModelBatch  batch = new ModelBatch();

    fbo.begin(); // make fbo the current buffer

    Gdx.gl.glViewport(0, 0,screenWidth, screenHeight);
    Gdx.gl.glClear(GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);

    batch.begin(camera);
    batch.render(instance, environment);
    batch.end();

    try{
        FileHandle fh = new FileHandle(output);
        Pixmap pixmap = ScreenUtils.getFrameBufferPixmap(0,0,screenWidth,screenHeight);
        PixmapIO.writePNG(fh, pixmap);
        pixmap.dispose();
    }catch (Exception e){
        e.printStackTrace();
    }

    fbo.end(); // Now you can draw on the display again

    batch.dispose();
    fbo.dispose();

1 Ответ

0 голосов
/ 30 декабря 2018

Насколько я понимаю, нам придется использовать два разных урока

https://github.com/mattdesl/lwjgl-basics/wiki/FrameBufferObjects

https://xoppa.github.io/blog/basic-3d-using-libgdx/ (вы, вероятно, уже знакомы с этим)

FrameBuffer fbo = new FrameBuffer(Pixmap.Format.RGBA4444, width, height, hasDepth);
// I've never used a FrameBuffer before so you may have to play around with constructor parameters

ModelBatch batch = // your ModelBatch initialization here

fbo.begin(); // make fbo the current buffer
glClearColor(0f, 0f, 0f, 1f);
glClear(GL_COLOR_BUFFER_BIT);
batch.resize(fbo.getWidth(), fbo.getHeight());

batch.begin();
batch.render(modelInstance, environment);
batch.end();

fbo.end(); // Now you can draw on the display again

// If you want to, you can resize your batch and use it to draw on the display
batch.resize(Display.getWidth(), Display.getHeight());

Как только вы сделаете все, что вам нужно сделать со своим FrameBuffer, вы можете получить текстуру

fbo.getTexture();

РЕДАКТИРОВАТЬ: Этот метод не существует, посмотрите наВопрос ОП для решения РЕДАКТИРОВАТЬ 2: FrameBuffer действительно имеет метод getColorBufferTexture ()

Для сохранения текстуры посмотрите на https://www.badlogicgames.com/forum/viewtopic.php?p=8358#p8358 или https://www.badlogicgames.com/forum/viewtopic.php?t=5686

Я использовал это дляполучить одну из ссылок: Libgdx сохранить SpriteBatch в текстуре все остальное, что я утешил

Если что-то не работает, дайте мне знать, и я могу попытаться осмотреться.

...