LibGDX'te saydamlığı olan bir PNG'yi nasıl oluşturabilirim?


12

LibGDX ile basit bir tic-tac-toe örneği inşa ediyorum. Basit görüntülerim var: çapraz, daire ve tahta, hepsi pngGIMP ile şeffaf bir arka planla oluşturuldu.

Onları Textureşeffaf bir şekilde nasıl oluşturabilirim ?

GL10 etkinleştirme özelliğini denedim, ancak işe yaramıyor gibi görünüyor.


Bunu kodunuza eklediniz mi: Gdx.gl.glClearColor (1, 1, 1, 1); Gdx.gl.glClear (GL10.GL_COLOR_BUFFER_BIT);
LeSam

Bunu render döngüsüne koy
LeSam

İyi çalışmalı (benim için yapar). Hangi spesifik sorunla karşılaştınız?
ashes999

İfadeniz: "Basit görüntülerim var: alfa ile gimp ile renk olarak oluşturulan tüm png'leri çapraz, daire ve tahta." renk anahtarı şeffaflığından önceden çoğaltılmış alfaya kadar birçok farklı şekilde yorumlanabilir . Ne demek istediğini açıklayabilir misin? Genellikle alfa harmanlama (alfa saydamlığı) veya alfa testi (alfa maskesi) gerekir; bunların hiçbiri varsayılan olarak etkin değildir ve ikincisi modern OpenGL'de desteklenmemektedir.
Andon M. Coleman

Yanıtlar:



2

Sprite oluşturun ve Doku'yı atayın, ardından alfa ayarını yapmak için Sprite setColor kullanın,

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

ve render () döngüsünde SpriteBatch kullanın

sprite.draw(spriteBatch);

SpriteBatch öğesinin DefaultShader kullandığını, saydamlığı denetlemek için kendi gölgelendiricinizi yazabileceğinizi ve elbette bunun için OpenGL ES 2.0'ı etkinleştirmeniz gerektiğini unutmayın.
daniel

1

Eğer koyarsan

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

render () döngünüzün başında ekranı siyah renkle yenilemeniz gerekir. Dolayısıyla, herhangi bir görüntünün içinde şeffaflık varsa, fark edilir olacaktır.

render () döngünüz muhtemelen şöyle görünür

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

Şeffaflık ile de .png oluşturmaya çalıştım. Temel kurulumla (karıştırma etkinleştirilmedi) düzgün şekilde oluşturulmadı.

Harmanlamayı hiç etkinleştirmedim, ancak bunu ekledim:

Gdx.gl.glClear(GL20.GL_ALPHA_BITS);

Benim sorunum alfa hiç temizlenmedi. Yani 0.1 alfa ile oluştursaydım, alfa 1'e kadar yığılıncaya kadar 10 kare sürecekti.

Bunun eski bir soru olduğunu biliyorum, o zaman çözümler farklıydı. enableBlending yine de çalışmalıdır, ancak bu alfa "yığın" önler emin değilim. Alfa bitlerini temizlemek, muhtemelen katı görünümü önlemenin en kolay yoludur.

Gerçek renderleme gelince, bu her zamanki gibi.

//Viewport, camera, logic, etc
batch.begin();
//draw your image(s) here
batch.end();
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.