Як зробити PNG з прозорістю в LibGDX?


12

Я будую простий приклад тик-так-носок з LibGDX. У мене прості зображення: хрест, коло та дошка, всі pngстворені за допомогою GIMP з прозорим фоном.

Як я можу зробити їх Textureпрозорими?

Я намагався з функцією включення GL10, але, здається, не працює.


Ви вказали це у своєму коді: Gdx.gl.glClearColor (1, 1, 1, 1); Gdx.gl.glClear (GL10.GL_COLOR_BUFFER_BIT);
LeSam

помістіть це в цикл візуалізації
LeSam

Це має добре працювати (для мене). З якою конкретною проблемою ви зіткнулися?
ashes999

Ваше твердження: "У мене є прості зображення: хрест, коло та дошка всі png, створені за допомогою gimp з альфа-кольором". можна інтерпретувати безліч різних способів, від прозорості до кольорових ключів до попередньо розмноженої альфа. Чи можете ви уточнити, що ви маєте на увазі? Як правило, вам або знадобиться альфа-змішування (прозорість альфа) або альфа-тестування (альфа-маска); жодна з цих речей не включена за замовчуванням, а друга не підтримується в сучасному OpenGL.
Андон М. Коулман

Відповіді:



2

Створіть спрайт і призначте для нього текстуру, а потім використовуйте Sprite setColor для налаштування його альфа, як,

Texture yourTexture = new Texture("image.png");
sprite = new Sprite(yourTexture);
//RGBA
sprite.setColor(1, 0, 0, 0.2f);

і в циклі render () використовуйте SpriteBatch

sprite.draw(spriteBatch);

Зверніть увагу, що SpriteBatch використовує DefaultShader, якщо ви хочете, щоб ви могли написати власний шейдер для контролю прозорості, і, звичайно, ви повинні включити OpenGL ES 2.0 для цього.
Даніель

1

Якщо покласти

Gdx.gl.glClearColor(0, 0, 0, 1); 
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 

на початку вашого циклу render () слід оновити екран чорним кольором. Тож якщо якісь зображення мають прозорість у них, це буде помітно.

тож ваш цикл render () може виглядати приблизно так

public void render(float delta) {
  Gdx.gl.glClearColor(0, 0, 0, 1);
  Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

  // Update logic & etc.        

  batch.begin();

  // Place your render calls
  // In this I use a Sprite object named "sprite" and all you need to do is call .draw();
  // on it and it will render at 0,0, unless told differently with .setPosition();

  sprite.draw(batch);

  batch.end();              
}

0

Я також намагався відобразити .png із прозорістю. З базовою установкою (змішування не активоване) воно не відображалось належним чином.

Я ніколи не активував блендування, але додав це:

Gdx.gl.glClear(GL20.GL_ALPHA_BITS);

Моя проблема - альфа ніколи не була очищена. Це означає, що якщо я вивів 0,1 альфа, це займе 10 кадрів, поки альфа не буде "складена" назад до 1. Додавання виклику вище очистило альфа, так само, як ви очистили б колір.

Я знаю, що це старе питання, тому рішення тоді були іншими. enableBlending все одно має працювати, але я не впевнений, чи це запобігає "укладанню" альфа. Очищення альфа-бітів - це, мабуть, найпростіший спосіб запобігти твердому вигляду.

Що стосується фактичного відображення, то це те саме, що завжди.

//Viewport, camera, logic, etc
batch.begin();
//draw your image(s) here
batch.end();
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.