Артефакт FrameBuffer при уменьшении окна Libgdx? [закрыто]JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Артефакт FrameBuffer при уменьшении окна Libgdx? [закрыто]

Сообщение Anonymous »

При уменьшении окна меньше исходного размера окна приложения, определенного в Lwjgl3Launcher, появляются странные артефакты.
В конце функции рендеринга я рисую в FrameBuffer и удаляю некоторые части конечного изображения, которые не следует отображать с помощью растрового изображения, а затем рисовать полученную текстуру.
Пока это работает нормально, но когда я уменьшаю размер окна до более низкого разрешения, тогда то, что изначально было определено в Lwjgl3Launcher в функции getDefaultConfiguration(), в этой текстуре появляются артефакты.

Код: Выделить всё

configuration.setWindowedMode(800, 600);
Ее мой код в конце функции рендеринга (EDIT2: полный пример кода):

Код: Выделить всё

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Pixmap;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.glutils.FrameBuffer;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.utils.ScreenUtils;
import com.badlogic.gdx.utils.viewport.ScreenViewport;
import com.badlogic.gdx.utils.viewport.Viewport;

/** {@link com.badlogic.gdx.ApplicationListener} implementation shared by all platforms. */
public class Main extends ApplicationAdapter {
private SpriteBatch batch;

private OrthographicCamera cameraMenu;
private Stage stage;
private Viewport viewportMenu;

final float GAME_WORLD_WIDTH = 10000;
final float GAME_WORLD_HEIGHT = 10000;

private FrameBuffer frameBuffer;

@Override
public void create() {
batch = new SpriteBatch();

cameraMenu = new OrthographicCamera();
viewportMenu = new ScreenViewport(cameraMenu);
viewportMenu.apply();

cameraMenu.position.set(GAME_WORLD_WIDTH / 2f,GAME_WORLD_HEIGHT / 2f, 0f);

stage = new Stage();
stage.setViewport(viewportMenu);
}

@Override
public void resize(int width, int height) {
viewportMenu.update(width, height);

stage.getViewport().update(width, height, true);

if (frameBuffer != null) {
frameBuffer.dispose();
}

frameBuffer = new FrameBuffer(Pixmap.Format.RGBA8888, width, height, false);
}

@Override
public void render() {
ScreenUtils.clear(0f, 0f, 0f, 1f);

frameBuffer.begin();

Pixmap fg = Pixmap.createFromFrameBuffer(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
frameBuffer.end();

fg.setBlending(Pixmap.Blending.None);
// fg.setColor(new Color(0,0,0,0));
// fg.fill();
fg.setColor(Color.RED);
fg.fillRectangle(0, 0, fg.getWidth(), 10);
fg.fillRectangle(0, 0, 10, fg.getHeight());
fg.fillRectangle(0, fg.getHeight() - 10, fg.getWidth(), fg.getHeight() - 10);
fg.fillRectangle(fg.getWidth() - 10, 0, 10, fg.getHeight());

Texture fboTex = new Texture(fg);

batch.begin();
batch.setProjectionMatrix(cameraMenu.combined);
batch.draw(fboTex, 0, 0, fboTex.getWidth(), fboTex.getHeight(), 0, 0, 1, 1);
batch.end();

fboTex.dispose();
fg.dispose();

}

@Override
public void dispose() {
batch.dispose();
}
}
РЕДАКТИРОВАТЬ: Если я запустил этот код без начала/окончания FrameBuffer, артефакты не появятся. Но тогда я бы в основном манипулировал всем экраном, а не только объектами, которые я визуализирую в фреймбуфер.
Кроме того, если я раскомментирую две строки в приведенном выше коде, артефакты также исчезнут, кажется как будто что-то идет не так, когда Pixmap создается из FrameBuffer.
В методе изменения размера я всегда устанавливаю размер FrameBuffer равным текущему размеру окна, следуя изображению, как оно выглядит на экран:
Изображение артефакта текстуры
РЕДАКТИРОВАТЬ: для моей цели мне нужно визуализировать эти объекты в специальный FrameBuffer потому что в противном случае я удалю/удалю весь экран, а не только планеты.
С FB: правильно отрезать планеты
Без FB: целиком экран отключен
Я что-то делаю неправильно при создании нового FrameBuffer правильного размера в методе изменения размера?

Подробнее здесь: https://stackoverflow.com/questions/793 ... gdx-window
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»