GlScissor এর উদ্দেশ্য কী?


32

আমি জানি যে এটি স্টেনসিল পরীক্ষার চেয়ে আরও দক্ষ, তবে আমি কি ঠিক ধরে নিচ্ছি যে ভিউপোর্টের সাথে প্রজেকশন ট্রান্সফর্মেশন ব্যবহার করে একই কার্যকারিতা অর্জন করা যেতে পারে?

উত্তর:


46

তারা একে অপরের বিকল্পের চেয়ে পরিপূরক। আপনি প্রায় সর্বদা ভিউপোর্টের সমান মানগুলিতে কাঁচি আয়তক্ষেত্রটি সেট করতে চান।

গ্লোভিউপোর্ট () সাধারণকরণের অভিক্ষেপ স্থান থেকে স্ক্রিন স্পেসে রূপান্তর নির্দিষ্ট করে। বহুভুজগুলি প্রজেকশন স্পেসের কিনারে ক্লিপ করা থাকে তবে গ্লোক্লেয়ার () এর মতো অন্যান্য ড্র অপারেশনগুলি হয় না। সুতরাং, আপনি স্ক্রিন স্পেস ভিউপোর্ট অঞ্চলের অবস্থান এবং আকার নির্ধারণ করতে glViewport () ব্যবহার করেন তবে রাস্টারাইজার এখনও মাঝে মধ্যে that অঞ্চলের বাইরে পিক্সেল রেন্ডার করতে পারে।

সেখানেই কাঁচি আসে gl glScissor () একটি স্ক্রিন স্পেস আয়তক্ষেত্রটি সংজ্ঞায়িত করে যার বাইরে কিছুই আঁকা হয় না (যদি কাঁচি পরীক্ষা সক্ষম করা থাকে)।

সুতরাং উদাহরণস্বরূপ, ভিউপোর্টটি বড় উইন্ডোর একটি ছোট অংশে সেট করা থাকলেও নিম্নলিখিত কোডটি পুরো পর্দাটি সাফ করবে:

glViewport(200,200,100,100);
glClear(GL_COLOR_BUFFER_BIT);

GlScissor () যুক্ত করা এবং কাঁচি পরীক্ষা সক্ষম করা (যা ডিফল্টরূপে অক্ষম থাকে) ক্লিয়ারটিকে সীমাবদ্ধ করে।

glViewport(200,200,100,100);
glScissor(200,200,100,100);
glEnable(GL_SCISSOR_TEST);
glClear(GL_COLOR_BUFFER_BIT);

কখনও কখনও আপনি এমন একটি বাস্তবায়ন জুড়ে আসেন যা ভিউপোর্ট অঞ্চলে স্বয়ংক্রিয়ভাবে কাঁচি দেয় তবে এটি জিএল স্পেসিফিকেশন লঙ্ঘন করে।

এর বাইরেও, স্কিজার আয়তক্ষেত্রটি বিশেষ প্রভাবগুলির জন্য, ইউআই উপাদানগুলি ইত্যাদির জন্য ভিউপোর্টের উপ-আয়তক্ষেত্রে অঙ্কন অস্থায়ীভাবে সীমাবদ্ধ করতে ব্যবহার করা যেতে পারে


11
আরও পরিষ্কার হতে, Viewportশীর্ষস্থান গণনা ক্লিপ। আপনি যদি লাইন বেধের সাথে> 1 বা একটি বিন্দুটি gl_PointSize>> 1 দিয়ে আঁকেন তবে আপনি ভিউপোর্টের বাইরেও আঁকবেন।
gman

13

তারা গ্রাফিক্স পাইপলাইনের দুটি সম্পূর্ণ ভিন্ন অংশে কাজ করে।

glViewport আসলে একটি রূপান্তর নির্দিষ্ট করে, এবং এটি এমন একটি রূপান্তর যা ভার্টেক্স শ্যাডারের পরে কিন্তু খণ্ড শ্যাডারের আগে ঘটে। এটি যদি ধারণাগতভাবে এটি ফিট করে তা দেখতে সহায়তা করে তবে বিশ্ব স্থান থেকে স্ক্রিন স্পেসে আপনার ভার্টেক্স ডেটা পেতে যে রূপান্তরগুলি ব্যবহার করা হয় তার অংশ হিসাবে এটি বিবেচনা করুন (যেমন এটি মডেলভিউ এবং প্রক্ষেপণের সাথে তুলনামূলকভাবে সম্পর্কিত)।

সেই সময় ঘটে যাওয়া অন্যান্য প্রতি-খণ্ড ক্রিয়াকলাপগুলির সাথে মিশ্রিতকরণ, গভীরতা / স্টেনসিল ইত্যাদির সাথে একসাথে স্কিজার পরীক্ষা ঘটে a যখন কোনও খণ্ড কে কাঁচির পরীক্ষার মাধ্যমে পরীক্ষা করা হয়, সুতরাং ইতিমধ্যে এটি হয়ে গেছে ভিউপোর্ট রুপান্তর।

হ্যাঁ, কাঁচি পরীক্ষার স্টেনসিল দ্রুততর হতে পারে কারণ এটি কোনও খণ্ডের স্ক্রিন স্পেসের স্থানাঙ্কের উপর ভিত্তি করে একটি সাধারণ গ্রহণ / প্রত্যাখ্যান করা যায়, অন্যদিকে স্টেনসিলকে স্টেনসিল বাফারের বর্তমান মানের সাথে তুলনা করা দরকার, সম্ভবত বর্ধন বা হ্রাস যে বর্তমান মানও বিবেচনায় রাখে গভীরতা পরীক্ষার ফলাফল ইত্যাদি on

সুতরাং এগুলি সব একসাথে রেখে আপনি দেখতে পাচ্ছেন যে কাঁচি পরীক্ষা কেন বিদ্যমান। এটি আপনাকে স্ক্রিনের একটি আয়তক্ষেত্রাকার অংশে প্রতি-টুকরা অপসকে সীমাবদ্ধ করার ক্ষমতা দেয় তবে বাস্তবে বর্তমান ভিউপোর্টের রূপান্তরটি পরিবর্তন না করেই করে।


6

আমি দৃষ্টি আকর্ষণীয়ভাবে এই ধরণের জিনিস পছন্দ করি।

অনপেনজিএলে আমাদের কাছে 2 ডি স্থানাঙ্ক রয়েছে যা এক্স এবং ওয়াই অক্ষ উভয়ের জন্য -1 থেকে +1 পর্যন্ত যায়।

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

তারপরে এই চিত্রটি উইন্ডো স্থানাঙ্কিতে ম্যাপ করা দরকার।

আসুন কল্পনা করুন যে আমাদের উইন্ডোটির পিছনের গ্রাউন্ডের মতো গা color় রঙ রয়েছে এবং আমরা পরিষ্কার বর্ণের মতো সাদা।

সর্বাধিক সাধারণ ক্ষেত্রে ভিউপোর্ট এবং কাঁচি পুরো স্ক্রিনটি কভার করে।

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

তবে আমরা সেগুলি পর্দার একটি ছোট অঞ্চল হিসাবে সেট করতে পারি।

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

এই অঞ্চলগুলি পৃথক হতে পারে। নিম্নলিখিত উদাহরণে ভিউপোর্টটি পুরো পর্দাটি কভার করে, অন্যদিকে স্কিসারটি ছোট বাক্স।

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

এবং এই শেষ ক্ষেত্রে কাঁচি পুরো পর্দাটি কভার করে, যখন ভিউপোর্টটি ছোট বাক্স। লক্ষ্য করুন যা glClearপুরো স্ক্রিনকে প্রভাবিত করে, যেহেতু এটি কাঁচি অঞ্চল দ্বারা নির্ধারিত হয়।

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


1
এটি আমার পক্ষে স্পষ্ট ব্যাখ্যা, এটির জন্য সত্যই অঙ্কন দরকার।
লরেন্ট কেললেট

5

glScisors স্ক্রিনের একটি অংশের বিপরীতে জ্যামিতির ক্লিপিং সম্পন্ন করে।

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

glViewport ডিভাইস স্থানাঙ্কে প্রজেকশন স্থানাঙ্ককে মানচিত্র করে তবে ক্লিপ হয় না।

glStencil আরও জটিল প্যাটার্নগুলিতে যেমন অনিয়মিত আকারগুলিতে পৃথক পিক্সেলগুলি মাস্ক করতে ব্যবহৃত হয়। সুতরাং, glScisors দ্রুত হয়।


1

ভিউপোর্ট সহ প্রজেকশন ট্রান্সফর্মেশনগুলির চেয়ে glScissor আরও সহজ।

glScissor টেস্ট রেন্ডারিংয়ের সময় কোন পিক্সেল পরিবর্তন করা উচিত তা নির্দিষ্ট করে, যখন glViewport পরিবর্তন করে যে কীভাবে glকে ডিভাইস স্থানাঙ্ক থেকে উইন্ডো স্থানাঙ্কে মানচিত্র করা উচিত।

তারপরে যে আয়তক্ষেত্রটি আপনি রেন্ডার করতে চান তাতে ভিউপোর্টটি সেট করার সাথে এবং ভিউপোর্টের দ্বারা সম্পন্ন স্কেলিংটিকে পূর্বাবস্থায় ফিরিয়ে আনার জন্য প্রজেকশন ম্যাট্রিক্সকে সামঞ্জস্য করতে পার্থক্য।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.