- अधिकांश 2D स्क्रीन / बिटमैप समन्वय प्रणालियों में सकारात्मक Y अक्ष नीचे की ओर इंगित होता है (ऊपरी बाएं कोने में उत्पत्ति के साथ)।
- इस तरह ज्यादातर लोगों सकारात्मक वाई ओर इशारा करते हुए अक्ष के साथ ज्यामितीय सोचने के लिए काउंटर है अप (केंद्र में मूल के साथ)।
अधिकांश गेम दो अलग 2D समन्वय प्रणालियों का प्रबंधन कैसे करते हैं? निर्देशांक (स्क्रीन बनाम कार्टेशियन) के दो मुख्य प्रकार हैं, लेकिन कई अलग-अलग समन्वय स्थान हो सकते हैं: स्प्राइट स्पेस, वर्ल्ड स्पेस, व्यू स्पेस, स्क्रीन स्पेस, आदि ...
पृष्ठभूमि:
मैंने मूल रूप से दुनिया को अपने गेम मैच में 2 डी स्क्रीन कोऑर्डिनेट कन्वेंशन से मेल किया। इससे ग्राफिक्स ड्राइंग रूटीन का उपयोग करना बहुत स्वाभाविक हो गया, लेकिन एटैन 2 () जैसे त्रिकोणमितीय कार्यों का उपयोग करते समय सूक्ष्म मुद्दे उत्पन्न हुए। Atan2 () 2D स्क्रीन निर्देशांक खिलाने के परिणाम बहुत भ्रामक हैं क्योंकि atan2 () सकारात्मक y अक्ष बिंदुओं को मानता है।
इसलिए मैंने क्लासिक कार्टेशियन कोऑर्डिनेट सिस्टम (स्क्रीन के नीचे बाईं ओर मूल के साथ) का पालन करने के लिए अपनी दुनिया के निर्देशांक बदल दिए। Atan2 के साथ तर्क () बहुत अधिक सीधा है, लेकिन अब अन्य प्रकार के तर्क करना कठिन है:
- अगर मैं यहां स्क्रीन पर क्लिक करता हूं, तो नीचे क्या स्प्राइट है?
- मैंने उस स्प्राइट पर कहाँ क्लिक किया?
- यदि गलत स्थान पर स्प्राइट खींचा जाता है, तो गलत तरीके से क्या गणना की गई थी? स्क्रीन निर्देशांक या दुनिया समन्वय करती है?
मुझे पता है कि स्क्रीन से लेकर कार्टेशियन निर्देशांक तक रूपांतरण में केवल y (-1, y) मानों के वैकल्पिक अनुवाद के साथ y मान को स्केल करना शामिल है। मैं खेल डिजाइन के लिए सर्वोत्तम प्रथाओं में अधिक रुचि रखता हूं:
- क्या ज्यादातर गेम सिर्फ स्क्रीन समन्वय सम्मेलन से चिपके रहते हैं और उनकी सोच को बदलते हैं कि atan2 () को कैसे काम करना चाहिए?
- समन्वय प्रणाली रूपांतरण कब / कैसे किए जाते हैं? (मैट्रिस, ओओपी अमूर्त आदि का उपयोग करके)
- स्प्राइट स्थानों को स्प्राइट के केंद्र या कोनों में से एक के रूप में संग्रहीत किया जाता है? "गलत" दिशा में जाने पर स्प्राइट की ऊँचाई / चौड़ाई एक सामान्य समस्या लगती है जब मैं उन्हें खींचता हूँ।
हालांकि मेरा सवाल मुख्य रूप से 2D गेम्स के बारे में है, ऐसा लगता है कि OpenGL एक समन्वय प्रणाली का उपयोग करता है जहां Y अक्ष इंगित करता है। OpenGL को अंततः उन 3D निर्देशांकों को 2D स्क्रीन समन्वय प्रणाली पर प्रोजेक्ट करना होगा। शायद OpenGL की विधि में कुछ मार्गदर्शन पाया जा सकता है ...