मैं LibGDX में पारदर्शिता के साथ PNG कैसे प्रस्तुत करूं?


12

मैं LibGDX के साथ एक साधारण टिक-टैक-टो उदाहरण बना रहा हूं। मेरे पास सरल चित्र हैं: क्रॉस, सर्कल और बोर्ड, सभी को pngपारदर्शी पृष्ठभूमि के साथ जीआईएमपी के साथ बनाया गया है।

मैं उन्हें Textureपारदर्शिता के साथ कैसे प्रस्तुत कर सकता हूं ?

मैंने GL10 सक्षम सुविधा के साथ प्रयास किया है, लेकिन यह काम नहीं कर रहा है।


क्या आपने इसे अपने कोड में रखा है: Gdx.gl.glClearColor (1, 1, 1, 1); Gdx.gl.glClear (GL10.GL_COLOR_BUFFER_BIT);
लेसम

इसे रेंडर लूप में
डालें

यह ठीक काम करना चाहिए (मेरे लिए करता है)। आपने किस विशिष्ट समस्या में भाग लिया?
as999999

आपका कथन: "मेरे पास सरल चित्र हैं: रंग के रूप में अल्फा के साथ जिम्प के साथ बनाए गए सभी pngs को क्रॉस, सर्कल और बोर्ड करें।" रंग-कुंजी पारदर्शिता से लेकर पूर्व-गुणा किए गए अल्फा तक कई अलग-अलग तरीकों की व्याख्या की जा सकती है । क्या आप स्पष्ट कर सकते हैं कि आपका क्या मतलब है? आम तौर पर आपको या तो अल्फा ब्लेंडिंग (अल्फा पारदर्शिता) या अल्फा टेस्टिंग (अल्फा मास्क) की आवश्यकता होती है; इनमें से कोई भी चीज डिफ़ॉल्ट रूप से सक्षम नहीं है और दूसरा आधुनिक ओपनजीएल में समर्थित नहीं है।
एंडन एम। कोलमैन

जवाबों:



2

स्प्राइट बनाएँ और उसे बनावट असाइन करें, फिर स्प्राइट सेटेलर का उपयोग करके उसके अल्फा को समायोजित करें, जैसे,

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

और रेंडर () लूप स्प्राइटबैच का उपयोग करें

sprite.draw(spriteBatch);

ध्यान दें कि SpriteBatch DefaultShader का उपयोग करता है, अगर आप चाहेंगे कि आप पारदर्शिता को नियंत्रित करने के लिए अपने स्वयं के shader लिख सकते हैं, और निश्चित रूप से आपको इसके लिए OpenGL ES 2.0 को सक्षम करना चाहिए।
डेनियल

1

यदि आप डालते हैं

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

आपके रेंडर () लूप की शुरुआत में स्क्रीन को कलर ब्लैक के साथ रिफ्रेश करना चाहिए। इसलिए यदि किसी भी चित्र में पारदर्शिता है तो यह ध्यान देने योग्य होगा।

इसलिए आपके रेंडर () लूप संभवतः इस तरह दिखेंगे

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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.