मूल रूप से, मैं यह जानना चाहता हूं कि जब व्यूपोर्ट / विंडो का आकार बदलता है तो मैं रेंडर इमेज की विकृति या खिंचाव को कैसे दूर कर सकता हूं।
निम्नलिखित छवियां विकृति को विस्तृत करती हैं / मैं जिस स्ट्रेचिंग के बारे में बात कर रहा हूं:
मूल छवि (स्क्वायर विंडो)
विकृत / टूटी हुई छवि (आयताकार खिड़की)
आदर्श रूप से, दूसरी छवि को क्षैतिज खिंचाव के बिना गोले को प्रदर्शित करना चाहिए, और बड़ी खिड़की के आकार के लिए उपयोगकर्ता के दृश्य को अधिक उजागर करेगा।
यह कैसे किया जा सकता है?
मैं छवि को प्रस्तुत करने के लिए OpenGL के साथ काम कर रहा हूं, और मैं कॉल के माध्यम से परिप्रेक्ष्य प्रक्षेपण का उपयोग करता हूं:
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluPerspective(60, window.width/window.height, 0.01f, 100.0f)
पहलू-अनुपात width/height
उन सभी दस्तावेज़ों / ट्यूटोरियल्स के अनुसार है, जो मैं भर चुका हूँ, इसलिए मुझे यह गलत होने की उम्मीद नहीं है। हालांकि, मेरा संदेह यह है कि यह स्ट्रेचिंग समस्या को प्रभावित कर रहा है।
विचार के बाद
ईमानदारी से, जैसा कि मैं इस मुद्दे के बारे में अधिक सोचता हूं, मुझे विश्वास है कि समाधान में प्रत्यक्ष रूप से fovy (y- दिशा में देखने के क्षेत्र) कोण और पहलू-अनुपात के बीच आनुपातिक संबंध शामिल है।
उपरोक्त छवि का उपयोग एक संदर्भ के रूप में, यदि चौड़ाई बढ़ती है (क्षैतिज खिंचाव पैदा करता है), तो यह बहुत प्रशंसनीय लगता है कि फ़ॉवी कोण को ऊर्ध्वाधर खिंचाव का कारण बनना चाहिए जो प्रदान की गई छवि के आनुपातिकता को 'ठीक' करता है।
इसी तरह, चौड़ाई में कमी के लिए फोवी कोण में कमी की आवश्यकता होती है।
अपडेट करें:
इसलिए, इस बारे में और जांच करने के बाद, मैंने इस तरह से देखने के लिए निराशा के तरीके को बदलने का फैसला किया है:
gluPerspective(60 * (float)window.width/window.height, (float)window.width/window.height, 0.01f, 100.0f)
और मेरी उम्मीदें सही थीं, जिससे आनुपातिकता का मुद्दा हल हो गया। हालाँकि, यह मेरे इच्छित परिणाम प्राप्त नहीं करता है। जब खिड़की की चौड़ाई बढ़ जाती है, तो प्रदान की गई छवि छोटी हो जाती है (लेकिन क्षेत्र वास्तव में परिपत्र है)। इसके बजाय, गोले को आकार बिल्कुल नहीं बदलना चाहिए; प्रदर्शित होने वाले दृश्य की केवल मात्रा बदलनी चाहिए।