ওপেনজিএলে স্বচ্ছতা দেওয়ার জন্য কয়েকটি পদ্ধতি কী


14

আলফা মিশ্রণটি পৃষ্ঠগুলি যেমন স্বচ্ছ করতে তৈরি করা যায় তেমন:

glDisable(GL_DEPTH_TEST); //or glDepthMask(GL_FALSE)? depth tests break blending
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

তবে এটি কেবল তখনই কাজ করে যদি অবজেক্টগুলি সামনের ক্রমে ফিরে যায়। অন্যথায় পটভূমিতে জিনিসগুলি নীচের চিত্রের মেঝের মতো কাছাকাছি বস্তুর সামনে উপস্থিত হয়। কণা এবং জিইউআই উপাদানগুলির জন্য বাছাই করা ঠিক হবে, তবে ত্রিভুজ জালের জন্য মনে হচ্ছে এটি অনেক বেশি প্রচেষ্টা এবং ধীর হতে চাইবে, যেমনটি এখানে আলোচনা করা হয়েছে: https://www.opengl.org/wiki/Transpender_Sorting

এটি মোকাবেলায় সাধারণ পদ্ধতিগুলি কী কী? আমি জানি এটি বেশ বিস্তৃত এবং গভীরতার সাথে প্রয়োগের বিশদগুলির পরে নেই, কিছু পদ্ধতির সংক্ষিপ্ত বিবরণ এবং কী কী এতে জড়িত থাকতে পারে।

এখানে চিত্র বর্ণনা লিখুন


আমি নিশ্চিত নই যে এটির উত্তর হিসাবে যাওয়া উচিত বা না, তবে আপনার চিত্রটিতে ত্রুটিগুলি সমস্ত আদিমগুলির গভীরতা পরীক্ষা না করে রেন্ডারিংয়ের কারণে ঘটে । আপনার দৃশ্যটি 2 পাসে রেন্ডার করা উচিত: প্রথমে সাধারণত সমস্ত শক্ত জ্যামিতি রেন্ডার করুন। পরবর্তীতে নিষ্ক্রিয় গভীরতা লিখেছেন (না GL_DEPTH_TEST) এবং রেন্ডার অস্বচ্ছ জ্যামিতি মোটামুটিভাবে ব্যাক টু সামনে অর্ডার। এটি নিশ্চিত করবে যে এর আগে যে শক্ত জ্যামিতির সামনে স্বচ্ছ জ্যামিতি আঁকা হবে না।
ইয়ুরিক্স

@ ইউরিক্স এক্ষেত্রে এটি সম্ভবত আমার পক্ষে একটি দুর্বল উদাহরণ, তবে সবকিছুই স্বচ্ছ হতে বোঝানো হয়েছে। আমি খারাপ কিছু করার সময় ভুল স্বচ্ছতা কীভাবে দেখায় তা দেখানোর জন্য আমি কিছু চাইছিলাম। এছাড়াও এমন একটি উদাহরণ যেখানে জ্যামিতি বাছাই করা আশ্চর্যরকমভাবে কঠিন হবে (উদাহরণস্বরূপ এখানে মেঝেটি এক বিশালাকার বহুভুজ এবং পুরো গভীরতার পরিসীমা জুড়ে)।
jozxyqk

উত্তর:


11

সুস্পষ্ট অর্ডার এড়ানোর কৌশলগুলির একটি সেট অর্ডার ইন্ডিপেন্ডেন্ট ট্রান্সপারেন্সি (সংক্ষেপে ওআইটি) এর নামে চলে।

প্রচুর ওআইটি কৌশল রয়েছে।

.তিহাসিকভাবে একটি হ'ল গভীরতা পিলিং । এই পদ্ধতির মধ্যে আপনি প্রথমে সামনের সর্বাধিক টুকরা / পিক্সেল রেন্ডার করেন, তারপরে আপনি আগের ধাপে পাওয়া একটির নিকটতম এবং আরও অনেকগুলি স্তর খুঁজে পাবেন, আপনার প্রয়োজন অনুসারে যতগুলি "স্তর" চালিয়ে যান। একে গভীরতা পিলিং বলা হয় কারণ প্রতিটি পাসে আপনি গভীরতার একটি স্তর "খোসা" করেন। আপনার সমস্ত স্তর সাধারণভাবে পিছন থেকে সামনের দিকে পুনরায় সংযুক্ত করা যেতে পারে। এই অ্যালগরিদম বাস্তবায়নের জন্য আপনার কাছে গভীরতার বাফারের একটি অনুলিপি থাকতে হবে।

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

মূল কাগজ ব্যতীত ওয়েট ব্লেন্ডেড ওআইটি প্রয়োগের বিশদ এবং সমস্যার এক দুর্দান্ত সংস্থান ম্যাট পেটিনোর ব্লগে । যেমন আপনি তাঁর পোস্টটি থেকে পড়তে পারেন এই কৌশলটি কোনও রূপালী বুলেট নয়। প্রধান সমস্যা হ'ল ওয়েটিং স্কিমটি কেন্দ্রীয় এবং এটি আপনার দৃশ্য / বিষয়বস্তু অনুসারে সুর করা দরকার। তার পরীক্ষাগুলি থেকে, প্রযুক্তিটি তুলনামূলকভাবে কম এবং মাঝারি ধরণের অস্বচ্ছতার জন্য দুর্দান্ত কাজ করে বলে মনে হচ্ছে, এটি ব্যর্থ হয় যখন অস্বচ্ছতা 1 এ আসে এবং এমনভাবে এমন উপকরণগুলি ব্যবহার করা যায় না যেখানে পৃষ্ঠের বড় অংশটি অস্বচ্ছ থাকে (তিনি উদ্ভিদের উদাহরণ তৈরি করেন)।

আবার, আপনি কীভাবে আপনার গভীরতা-ওজনকে সুর করেছেন এবং আপনার ব্যবহারের ক্ষেত্রে যেগুলি পুরোপুরি ফিট করে সেইগুলি সন্ধান করা অগত্যা তুচ্ছ নয় to

ওজনযুক্ত মিশ্রিত ওআইটি-র জন্য কী প্রয়োজন, দু'টি অতিরিক্ত লক্ষ্যমাত্রার চেয়ে বেশি কিছু নয়। একটি যা আপনি প্রিমুলিপ্লেটেড আলফা রঙ (রঙ * আলফা) এবং আলফা দিয়ে পূরণ করেন, উভয়ই সেই অনুযায়ী ভারিত। অন্যটি কেবল ওজনের জন্য।


6

একটি বিকল্প গভীরতা পিলিং ব্যবহার করা হয়।

মূলত, একটি দৃশ্যের nনিকটতম, দ্বিতীয়-নিকটতম, সমস্ত দিকের নিকটতম অংশগুলির সমস্ত উপায় নির্ধারণের জন্য দৃশ্যের একটি নির্দিষ্ট সংখ্যক বার (বলে, সময়) প্রক্রিয়া করে n

এই প্রক্রিয়াকরণটি পুরো দৃশ্যে নিয়মিত গভীরতার পরীক্ষা প্রয়োগ করে করা হয় (যা প্রাকৃতিকভাবে নিকটতম পৃষ্ঠকে প্রত্যাবর্তন করে)। এর পরে গভীরতা পরীক্ষায় ফিরে আসার চেয়ে কম গভীরতার সাথে সমস্ত কিছু উপেক্ষা করে প্রথম স্তরটি ফিল্টার করার জন্য গভীরতা পরীক্ষার ফলাফলটি ব্যবহার করা হয়।

আবার গভীরতা পরীক্ষা প্রয়োগ করে দ্বিতীয় স্তরটি ফিরে আসবে। প্রয়োজন অনুসারে পুনরাবৃত্তি করুন।

আপনার স্তরগুলি একবার হয়ে গেলে, আপনি কেবল সমস্ত স্তরগুলি বিপরীত ক্রমে আঁকতে পারেন (ধরে নিচ্ছেন যে আপনি প্রতিটি স্তরের জন্য আরজিবিএ রঙগুলি ট্র্যাক করে রেখেছেন), সাধারণভাবে মিশ্রণ, যেহেতু স্তরগুলি সামনের থেকে পিছনে ক্রমে থাকে।


1
ধন্যবাদ! দেখে মনে হচ্ছে এটির জন্য আমার দুটি গভীরতার বাফার দরকার। অর্থাত্ একটি সর্বশেষ গভীরতার সঞ্চয় এবং ফিল্টার করতে এবং বর্তমান রেন্ডারের জন্য গভীরতা পরীক্ষা করার জন্য একটি। আমি ভুল হলে আমাকে সংশোধন করুন তবে আমি ধরে নিচ্ছি এফবিওয়ের জন্য আমার দুটি গভীরতার টেক্সচারের প্রয়োজন যা আমি প্রতিটি পিলিং পাসের মধ্যে অদলবদল করি।
jozxyqk

1
@ জোজক্সিএক্কেক্ট সঠিক, এই পদ্ধতির জন্য দুটি গভীরতার বাফার প্রয়োজন।
es1024

1

সিঙ্গেল-পাস নং (বা কয়েকটি) এর ক্রেম ডি লা ক্রেম ওপেনজিএলে স্বচ্ছতার সাথে আপস করে একটি এ-বাফার। আধুনিক ওপেনজিএল দিয়ে এটি প্রয়োগ করা সম্ভব:

http://blog.icare3d.org/2010/06/fast-and-accurate-single-pass-buffer.html

এটি গভীরতার পিলিংয়ের একাধিক পাস এড়িয়ে যায় এবং প্রচুর বাছাইয়ের প্রয়োজন হয় না।


3
আদর্শভাবে, উত্তরগুলি স্ব-অন্তর্ভুক্ত হওয়া উচিত এবং বাহ্যিক লিঙ্কগুলিতে নির্ভরযোগ্যভাবে নির্ভর করা উচিত। সম্পূরক উপাদানের জন্য লিঙ্কগুলি থাকা দুর্দান্ত, তবে একটি উত্তর কেবল একটি কীওয়ার্ডের সমন্বিত হওয়া উচিত নয়। যদি আপনি একটি এ-বাফার কী এবং এটি কীভাবে কাজ করে তার কিছু বিশদ অন্তর্ভুক্ত করতে পারে যা আপনার উত্তরকে ব্যাপকভাবে উন্নত করবে।
মার্টিন ইন্ডার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.