দ্রষ্টব্য: আমি ইতিমধ্যে একটি উত্তর পেয়েছি (যা আমি এই প্রশ্নের পরে পোস্ট করব) - আমি কেবল ভাবছিলাম যে আমি এটি সঠিকভাবে করছি কিনা, বা আরও ভাল উপায় আছে কিনা।
আমি ওপেনজিএল ইএস (জওজিএল) ব্যবহার করে একটি "2.5 ডি" আইসোমেট্রিক গেম তৈরি করছি। "2.5 ডি" দ্বারা, আমি বোঝাতে চাইছি পৃথিবী 3 ডি, তবে এটি 2 ডি আইসোমেট্রিক টাইল ব্যবহার করে রেন্ডার করা হয়েছে।
আমার যে সমস্যাটি সমাধান করতে হয়েছিল তা হ'ল আমার টেক্সচারগুলি যথাযথভাবে (পিছন থেকে সামনের দিকে) রেন্ডার করতে হয়েছিল, যাতে সঠিক প্রভাব তৈরি করতে টাইলগুলি সঠিকভাবে ওভারল্যাপ হয়ে যায়। কিছু পড়ার পরে, আমি দ্রুত বুঝতে পারি যে এটি "পুরাতন টুপি" 2 ডি পদ্ধতির। এটি দক্ষতার সাথে করা শক্ত হয়ে উঠেছে, যেহেতু 3 ডি ওয়ার্ল্ডটি প্লেয়ারের মাধ্যমে সংশোধন করা যেতে পারে (সুতরাং 3D স্থানের যে কোনও জায়গায় জিনিস উপস্থিত হতে পারে) - সুতরাং এটি যৌক্তিক বলে মনে হয়েছিল যে আমি গভীরতার বাফারের সুবিধা নিয়েছি। এর অর্থ হ'ল আমাকে সঠিক ক্রমে স্ট্যান্ড রেন্ডারিংয়ের বিষয়ে চিন্তা করতে হবে না।
তবে, আমি একটি সমস্যার মুখোমুখি হয়েছি। যদি আপনি ব্যবহার করে GL_DEPTH_TEST
এবং GL_BLEND
একসাথে হন তবে এটি এমন একটি প্রভাব তৈরি করে যেখানে জেড অর্ডার দ্বারা "সাজানো" হওয়ার আগে অবজেক্টগুলি পটভূমিতে মিশ্রিত হয় (যার অর্থ স্বচ্ছতা হওয়া উচিত যেখানে আপনি একটি অদ্ভুত ধরণের ওভারল্যাপ পাবেন)।
এখানে এমন কিছু সিডো কোড যা সমস্যার চিত্রিত করবে (ঘটনাক্রমে, আমি অ্যান্ড্রয়েডের জন্য libgdx ব্যবহার করছি)।
create() {
// ...
// some other code here
// ...
Gdx.gl.glEnable(GL10.GL_DEPTH_TEST);
Gdx.gl.glEnable(GL10.GL_BLEND);
}
render() {
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
Gdx.gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
// ...
// bind texture and create vertices
// ...
}
সুতরাং প্রশ্নটি হল: আমি কীভাবে স্বচ্ছতার ওভারল্যাপ সমস্যাটি সমাধান করব?