ওপেনজিএলে, আমি কীভাবে গভীরতার বাফারের গভীরতার সীমাটি আবিষ্কার করতে পারি?


11

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

উত্তর:


10

গভীরতার বাফারে লিখিত মানগুলির পরিসীমা আপনি যা চান তা হ'ল। সাধারণত এগুলি 0 থেকে 1 ব্যাপ্তিতে পড়ে। গভীরতার বাফারে লিখিত প্রকৃত মানটি এনডিসি স্পেসের ভার্টেক্সের জেড মানের (ক্লিপ স্পেসে w দ্বারা দৃষ্টিকোণ বিভাজনের পরে) ভিত্তিতে ভিউপোর্ট রূপান্তরের সময় গণনা করা হয়।

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

ওপেনএলটি ভিউপোর্ট রুপান্তর ম্যাট্রিক্সের সংজ্ঞাটি বিভিউপোর্টপোর্ট এবং গ্লোডেপথরঞ্জ কলগুলিতে বিভক্ত করে। glDepthRange হ'ল যা আপনি জিজ্ঞাসা করছেন গভীরতা পরিসীমা নির্ধারণের জন্য দায়ী স্কেল ফ্যাক্টরকে নিয়ন্ত্রণ করে। আপনি বর্তমান পরিসরটি পুনরুদ্ধার করতে নির্বাচকের সাথে glGetFloatv কল করতে পারেন GL_DEPTH_RANGE। এটি আপনাকে 0 থেকে 1 ধরে না নিয়ে রেঞ্জটি ব্যবহার করার অনুমতি দেবে (যদিও বাস্তবে 99.9% সময়, বাস্তবে কেউ এটি পরিবর্তন করে না)।

আরও পড়ুন, আপনি যদি চোখের স্থান থেকে গভীরতার বাফার পর্যন্ত জেড মানটি অনুসরণ করতে গণিতটিকে পুনর্গঠন করতে চান তবে কিছুটা অন্তর্দৃষ্টি চান।


আমি জোশকে এটি সমস্ত স্টাডলি অতিরিক্ত রেফারেন্স উপাদান এবং ত্রিভুজ প্ল্যানার-নেস সম্পর্কে টিপ দেওয়ার জন্য দেব। আমি যে হ্যাক করতে চাইছি যেখানে আমি যে জ্যামিতিটি দিচ্ছি তার জেড-সীমাটির সাথে হুবহু ক্লিপ প্লেনগুলির কাছাকাছি / দূরের ক্লিপ প্লেনগুলি মিলিয়েছে যাতে গভীরতার মানচিত্রটির সুন্দর মান রয়েছে। আমি কী করব? আমি পাসের ক্ষেত্রে # 2 গভীরতার মানচিত্রের ভিত্তিতে পাস # 2 চলাকালীন আকর্ষণীয় অবস্থান সুনির্দিষ্ট অস্পষ্ট প্রভাব তৈরি করতে চাই।
দুগলা

7

গভীরতার বাফারে মানগুলি সর্বদা 0-1 এর মধ্যে থাকে। শূন্যটি হল যে রেন্ডার করা খণ্ডটি কাছাকাছি সমুদ্রের গভীরতায় এবং 1 হ'ল খণ্ডটি দূরবর্তী বিমানের গভীরতায়। এবং এর মধ্যে সব কিছু।

আপনি যদি বিশ্ব মহাকাশে বাস্তব গভীরতা জানতে চান তবে গভীরতা বাফার থেকে এটি গণনা করা সহজ।

depth = nearPlane + ( farPlane - nearPlane ) * depthBufferValue;

এবং গভীরতার বাফারের আরও নির্ভুলতা অর্জনের জন্য কেন আপনি আপনার প্রজেক্ট ম্যাট্রিতে নিকটবর্তী এবং দূরবর্তী বিমানগুলি নির্দিষ্ট করেন।

গভীরতা বাফার মানগুলি ব্যবহার করার সময় গভীরতা এবং দূরত্বের মধ্যে পার্থক্য সম্পর্কে সচেতন হন।


@notebene। প্রায় সেখানে. আমি গভীরতা বাফারের মানগুলির পরিসীমা পুনরুদ্ধার করতে চাই 0 -> 1 হওয়া উচিত So সুতরাং, ডিপডুফারটি নূন্যতম / সর্বাধিক সন্ধান করার জন্য নীচের পাস 1 এর কোনও উপায় রয়েছে এবং পাস 2 এর সময় পুনরুদ্ধার করতে এটি ব্যবহার করুন
ডুগলা

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