ฉันจะแสดง 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

คำสั่งของคุณ: "ฉันมีภาพง่าย ๆ : ไขว้, วงกลมและบอร์ด pngs ทั้งหมดที่สร้างขึ้นด้วย gimp ด้วย alpha เป็นสี" สามารถตีความได้หลายวิธีตั้งแต่ความโปร่งใสของปุ่มสีไปจนถึงอัลฟาคูณล่วงหน้า คุณสามารถอธิบายสิ่งที่คุณหมายถึง? โดยทั่วไปคุณจะต้องผสมอัลฟา (อัลฟาโปร่งใส) หรือการทดสอบอัลฟา (หน้ากากอัลฟา); สิ่งเหล่านี้ไม่ได้ถูกเปิดใช้งานตามค่าเริ่มต้นและไม่รองรับสิ่งที่สองใน OpenGL สมัยใหม่
Andon M. Coleman

คำตอบ:



2

สร้าง Sprite และกำหนด Texture ให้กับมันจากนั้นใช้ Sprite setColor เพื่อปรับอัลฟาของมันเช่นนั้น

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

และในการเรนเดอร์ () ให้ใช้ SpriteBatch

sprite.draw(spriteBatch);

โปรดทราบว่า SpriteBatch ใช้ DefaultShader หากคุณต้องการเขียน shader ของคุณเองเพื่อควบคุมความโปร่งใสและแน่นอนว่าคุณควรเปิดใช้งาน OpenGL ES 2.0
daniel

1

ถ้าคุณใส่

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

ที่จุดเริ่มต้นของการเรนเดอร์ () ของคุณควรรีเฟรชหน้าจอด้วยสีดำ ดังนั้นหากภาพใดมีความโปร่งใสในภาพจะเห็นได้ชัดเจน

ดังนั้นลูป 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();
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.