কীভাবে আমি LibGDX এ স্বচ্ছতার সাথে একটি পিএনজি রেন্ডার করব?


12

আমি LibGDX এর সাথে একটি সাধারণ টিকি-টো-টো উদাহরণ তৈরি করছি। আমার সহজ চিত্র রয়েছে: ক্রস, চেনাশোনা এবং বোর্ড, সমস্তই pngস্বচ্ছ পটভূমি সহ জিম্প দিয়ে তৈরি।

আমি কীভাবে এগুলিকে Textureস্বচ্ছতার সাথে রেন্ডার করতে পারি ?

আমি জিএল 10 সক্ষম বৈশিষ্ট্যটি দিয়ে চেষ্টা করেছি, তবে মনে হয় এটি কার্যকর হয় না।


আপনি কি আপনার কোডটিতে এটি রেখেছেন: Gdx.gl.glC ClearColor (1, 1, 1, 1); Gdx.gl.glClear (GL10.GL_COLOR_BUFFER_BIT);
লেসাম

এটি রেন্ডার লুপে রাখুন
লেসাম

এটি ভাল কাজ করা উচিত (আমার জন্য)। আপনি কোন নির্দিষ্ট সমস্যার মধ্যে পড়েছেন?
ashes999

আপনার বক্তব্য: "আমার কাছে সহজ চিত্র রয়েছে: আলফা দিয়ে রঙ হিসাবে জিমের সাথে তৈরি সমস্ত পিএনজি ক্রস, বৃত্ত এবং বোর্ডে" " ব্যাখ্যা করা যেতে পারে অনেক রঙ-কি স্বচ্ছতা থেকে বিভিন্ন উপায়ে প্রাক-বহুগুণ করতে আলফা। আপনি কি বলতে চান তা পরিষ্কার করে বলতে পারেন? সাধারণত আপনি হয় আলফা মিশ্রণ (আলফা স্বচ্ছতা) বা আলফা টেস্টিং (আলফা মাস্ক) প্রয়োজন হয়; এগুলির কোনওটিই ডিফল্টরূপে সক্ষম নয় এবং দ্বিতীয়টি আধুনিক ওপেনএল সমর্থন করে না।
অ্যান্ডন এম। কোলেম্যান

উত্তর:



2

স্প্রাইট তৈরি করুন এবং এতে টেক্সচারটি বরাদ্দ করুন, তারপরে এর আলফা সামঞ্জস্য করতে স্প্রিট সেট কালার ব্যবহার করুন,

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

এবং রেন্ডারে () লুপ স্প্রিটব্যাচ ব্যবহার করুন

sprite.draw(spriteBatch);

নোট করুন স্প্রিটব্যাচ ডিফল্ট শ্যাডার ব্যবহার করে, যদি আপনি চান আপনি স্বচ্ছতা নিয়ন্ত্রণ করতে নিজের শেডার লিখতে পারেন এবং অবশ্যই আপনার জন্য ওপেনএল ইএস 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);

আমার সমস্যাটি ছিল আলফা কখনই সাফ হয়নি। মানে যদি আমি ০.০ টি আলফা দিয়ে রেন্ডার করি তবে আলফাটি "স্ট্যাকড" না হওয়া পর্যন্ত 10 ফ্রেম লাগবে above উপরের কলটি যুক্ত করা আলফাটিকে সাফ করেছে, ঠিক যেমন আপনি রঙ সাফ করবেন।

আমি জানি এটি একটি পুরানো প্রশ্ন, সুতরাং সমাধানগুলি তখন আলাদা ছিল। সক্ষম মিশ্রণটি এখনও কাজ করা উচিত, তবে আমি নিশ্চিত নই যে এটি আলফার "স্ট্যাকিং" রোধ করে কিনা। আলফা বিট সাফ করা কঠিন চেহারা রোধ করার সম্ভবত সবচেয়ে সহজ উপায়।

প্রকৃত রেন্ডারিংয়ের ক্ষেত্রে, এটি সর্বদা হিসাবে একই।

//Viewport, camera, logic, etc
batch.begin();
//draw your image(s) here
batch.end();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.