মূলত, আমি জানতে চাই যে যখন ভিউপোর্ট / উইন্ডোর আকার পরিবর্তন হয় তখন আমি কীভাবে রেন্ডার করা চিত্রটির বিকৃতি বা প্রসারিত চিত্র সরিয়ে ফেলতে পারি।
নীচের চিত্রগুলি বিকৃতি / প্রসারিতের উদাহরণ দিচ্ছি যার বিষয়ে আমি কথা বলছি:
আসল চিত্র (স্কোয়ার উইন্ডো)
বিকৃত / প্রসারিত চিত্র (আয়তক্ষেত্রাকার উইন্ডো)
আদর্শভাবে, দ্বিতীয় চিত্রটি অনুভূমিক প্রসারিত ছাড়াই গোলকটি প্রদর্শন করা উচিত এবং এটি আরও বেশি দৃশ্যের ব্যবহারকারীর কাছে বড় উইন্ডো আকারের জন্য প্রকাশ করতে পারে।
কিভাবে এই কাজ করা যেতে পারে?
আমি চিত্রটি রেন্ডার করতে ওপেনজিএল নিয়ে কাজ করছি এবং আমি কলগুলির মাধ্যমে দৃষ্টিকোণ প্রজেকশনটি ব্যবহার করছি:
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluPerspective(60, window.width/window.height, 0.01f, 100.0f)
দিকটি অনুপাতটি width/height
যে সমস্ত দস্তাবেজ / টিউটোরিয়াল আমি এসেছি তার সাথে সামঞ্জস্যপূর্ণ, তাই আমি এটি ভুল হওয়ার আশা করি না। তবে আমার সন্দেহ হ'ল এটি প্রসারিত সমস্যাটিকে প্রভাবিত করছে।
ভাবনার পরে
সত্যই, আমি বিষয়টি আরও ভাবছি বলে, আমি বিশ্বাস করতে পরিচালিত করেছি যে সমাধানটির মধ্যে fovy (y- দিকের দৃশ্যের ক্ষেত্র) কোণ এবং দিক-অনুপাতের মধ্যে সরাসরি সমানুপাতিক সম্পর্ক জড়িত।
উপরের চিত্রটি রেফারেন্স হিসাবে ব্যবহার করে, প্রস্থ বৃদ্ধি পেলে (অনুভূমিক প্রসারিত হতে পারে), এটি অত্যন্ত প্রশংসনীয় বলে মনে হচ্ছে যে রতির চিত্রটির আনুপাতিকতা 'সংশোধন' করে এমন একটি উল্লম্ব প্রসার ঘটাতে ফোভি কোণটি অবশ্যই বাড়তে হবে।
তেমনিভাবে, প্রস্থে হ্রাসের জন্য ফভি কোনে হ্রাস প্রয়োজন requires
হালনাগাদ:
সুতরাং, আরও তদন্ত করার পরে, আমি দেখার মত হতাশাকে এভাবে সেট আপ করার পদ্ধতিটি পরিবর্তন করার সিদ্ধান্ত নিয়েছি:
gluPerspective(60 * (float)window.width/window.height, (float)window.width/window.height, 0.01f, 100.0f)
এবং আমার প্রত্যাশা সঠিক ছিল, যা আনুপাতিকতার সমস্যা সমাধান করেছে। তবে এটি আমার পছন্দসই ফলাফল অর্জন করে না doesn't উইন্ডোর প্রস্থ বৃদ্ধি পেলে রেন্ডার করা চিত্রটি ছোট হয়ে যায় (তবে গোলকটি প্রকৃতপক্ষে বৃত্তাকার)। পরিবর্তে, গোলকের আকারটি মোটেও পরিবর্তন করা উচিত নয়; প্রদর্শিত দৃশ্যের পরিমাণের পরিবর্তন হওয়া উচিত।