আপনি যা বর্ণনা করেছেন তা সম্পূর্ণরূপে এবং উপযুক্তভাবে সমাধানের স্বাধীনতার জন্য। আপনার আঁকার যে কোনও কিছুই সত্যই আপনার উইন্ডোর একই অনুপাত গ্রহণ করবে।
তবে আপনি যদি এর বাইরে আরও কিছু না করেন তবে আপনার দিকের অনুপাতের সমস্যা হবে। উদাহরণস্বরূপ, আপনি যে সংখ্যা লিখেছেন তা প্রদত্ত, যদি আপনি একটি বৃত্ত আঁকেন তবে এটি স্কোয়াশ করা হবে - এটির চেয়ে লম্বা প্রশস্ত হবে কারণ আপনার অনুভূমিক স্কেল 800 / (50 + 50) = 8 এবং আপনার উল্লম্ব স্কেল 600 / (50++) 50) = 6।
এই সমস্যার কোনও স্বয়ংক্রিয় সমাধান হতে পারে না ; আপনি কোন গ্রাফিকাল ফলাফল চান তা চয়ন করতে হবে এবং গেমপ্লেতে এর প্রভাব বিবেচনা করবে। কিছু সাধারণ উদাহরণ:
কোনও এইচইউডি ছাড়াই একটি দৃষ্টিকোণ-প্রক্ষেপণ 3 ডি গেমটিতে, সাধারণ সহজ সমাধান (অংশ হিসাবে ওপেনজিএলে উপলব্ধ gluPerspective
) হ'ল উল্লম্ব মাত্রার তুলনায় প্রক্ষেপণের দেখার ক্ষেত্রটি ঠিক করা । এর অর্থ হ'ল এই জাতীয় খেলায়, আপনি যদি উইন্ডোটিকে অনুভূমিকভাবে আকার পরিবর্তন করেন তবে আপনি দৃশ্যের কম-বেশি দেখতে পাবেন এবং চিত্রের মাঝের অংশটি কোনও পরিবর্তন হবে না।
একই ধারণাটি 2D / 2.5D ভিউতেও প্রয়োগ করা যেতে পারে।
(দ্রষ্টব্য যে এটি খেলোয়াড়কে প্রশস্ত তবে লম্বা নয় উইন্ডো তৈরি করে তাদের ক্ষেত্রটি অনুভূমিকভাবে প্রসারিত করতে দেয় This প্রতিযোগিতামূলক মাল্টিপ্লেয়ার গেমটিতে এটি অযাচিত হতে পারে))
যদি আপনার কাছে স্থির দিকের অনুপাতের সাথে ভিউপোর্ট-ফিলিং গ্রাফিক্স থাকে (উদাহরণস্বরূপ, একটি নন-স্ক্রোলিং 2 ডি ম্যাপ, বা আলংকারিক সীমানা), বা যদি আপনি অন্যথায় বিন্যাসটি পরিবর্তন করতে না পারেন তবে আপনাকে দুটি কালো বার থাকার মতো কিছু করতে হবে অব্যবহৃত স্থান পূরণ করার পক্ষগুলি।
অথবা আপনি গ্রাফিকগুলি তৈরি করতে পারেন যা প্রান্তের চারপাশে থিম্যাটিকভাবে সামঞ্জস্যপূর্ণ ফিলার উপাদান রয়েছে যেগুলি গেমপ্লে ক্ষতিগ্রস্থ না করে ডিসপ্লেতে ফিট করতে পারে ped
অন্য গ্রাফিকের উপরে যদি আপনার এইচইডি থাকে, আপনি সিদ্ধান্ত নিতে পারেন যে প্রতিটি এইচইডি উপাদানটি উইন্ডোটির একটি অংশে (উপরে বাম, নীচের কেন্দ্র ইত্যাদি) স্থির করা হয়েছে এবং এর স্থানাঙ্কগুলি গণনা করুন; দিক অনুপাতের পরিবর্তনের 'প্রসারিত' এইচইউডি উপাদানগুলির মধ্যে 'সাদা স্থান' দ্বারা শোষিত হয়ে যায়।
বিষয়টির নির্দিষ্ট গণিত হিসাবে, আপনি যে রেজোলিউশন স্বাধীনতা করছেন, তা আপনাকে অনুপাতের অনুপাত, একটি একক সংখ্যা: দিয়ে শুরু করতে হবে width / height
। উদাহরণস্বরূপ, উইন্ডোটি বর্গক্ষেত্র হলে এটি 1 হবে; এটি যদি 800 বাই 600 হয় তবে এটি 800/600 = 4/3 = 1.333̅ হবে ̅
উদাহরণস্বরূপ, ধরুন আপনি উইন্ডোগুলি প্রশস্ত করা হলে বাম এবং ডানদিকে অতিরিক্ত স্থান অর্জনের জন্য আপনি লিখেছেন অর্থগোগ্রাফিক প্রক্ষেপণ চান want আপনি এটির মতো এটি করতে পারেন:
float aspect = width / height;
glViewport(0, 0, width, height);
glOrtho(-50.0 * aspect, 50.0 * aspect, -50.0, 50.0, 1.0, -1.0);
এটি গ্যারান্টি দেয় যে, উইন্ডোগুলির জন্য কমপক্ষে প্রশস্ত আকারে লম্বা হওয়াতে, আপনি x এবং y স্থানাঙ্কগুলির সাথে -50 থেকে 50 এর মধ্যে আঁকেন এমন কোনও কিছুই দৃশ্যমান হবে।
অন্যদিকে, উইন্ডোটি লম্বা হওয়ার চেয়ে সংকীর্ণ হলে -50 থেকে 50 রেঞ্জটি কেটে দেওয়া হবে। ধরা যাক আপনি নিশ্চিত হয়েছিলেন যে এটি সর্বদা দৃশ্যমান (যাতে উইন্ডোটি বর্গক্ষেত্রের হয় তবে আপনার সামগ্রীটি সর্বোচ্চ আকারে রয়েছে তবে অন্যথায় ছোট); সেক্ষেত্রে আপনি প্রস্থের পরিবর্তে উচ্চতার সাথে একই জিনিসটি করেন।
float aspect = width / height;
glViewport(0, 0, width, height);
if (aspect >= 1.0)
glOrtho(-50.0 * aspect, 50.0 * aspect, -50.0, 50.0, 1.0, -1.0);
else
glOrtho(-50.0, 50.0, -50.0 / aspect, 50.0 / aspect, 1.0, -1.0);
নোট করুন যে দ্বিতীয় ক্ষেত্রে আমরা গুণফলের চেয়ে বিভাজন করি। এটি কেবলমাত্র কারণটির width / height
চেয়ে আমরা অনুপাতের অনুপাতটি গণনা করেছি height / width
; আপনি যদি এইভাবে বুঝতে সহজ মনে করেন তবে পরস্পরকে গ্রহণ করুন।
আবার, দিক অনুপাত পরিচালনা করার একমাত্র উপায় এটি নয়; এটি নিশ্চিত করার জন্য এটি আপনার খুব সহজ একটি বিষয় যা আপনার বিষয়বস্তু স্কুইড বা বিচ্ছিন্ন নয়। জিনিসটা কি আপনি ঘটতে করতে চান যখন আপনার উইন্ডো চওড়া, লম্বা, অথবা যাই হোক না কেন; তারপরে এর গাণিতিক কাজ করুন।