2010-12-16 9 views
5

मुझे देखने अगर मैं इस सवाल का स्पष्ट रूप से पूछ सकते हैं करते हैं:2 डी टाइल-आधारित इंजन में ओपनजीएल व्यवहार: जब गति में, पिक्सेल "स्नैपिंग", सन्निकटन त्रुटियां?

मैं OpenGL ES में एक 2 डी टाइल-आधारित इंजन लिख रहा हूँ, यह एक पुराने स्कूल रेखापुंज इंजन की तरह लग रहे बनाने के इरादे के साथ। मेरी कला संपत्ति मूल संकल्प पर है (जो कहने के लिए, 1: 1 पिक्सेल कला है) और आयताकार बहुभुज पर मैप किया गया है, और मेरा ओपनजीएल व्यू ऑर्थोगोनल है और आयताकार (0.0, 0.0) तक (स्क्रीन.विड्थ, स्क्रीन.हेइट))। मैंने यह आशा की थी कि प्रदर्शन पर प्रत्येक पिक्सेल XY समन्वय विमान में "आभासी" पिक्सेल वर्ग के अनुरूप होगा, जो बदले में मेरी एक टाइल्स पर एक पिक्सेल के अनुरूप होगा। (टाइल्स 16.0 x 16.0 हैं, और मेरी दुनिया की उत्पत्ति स्पष्ट रूप से [0.0,0.0] है।)

मुझे यकीन था कि मेरा इंजन सन्निकटन त्रुटियों के कारण "नकली" दिखाई देगा। उदाहरण के लिए, मैंने सोचा था कि चूंकि टाइल पिक्सेल सीधे डिस्प्ले पर नहीं लिखे जा रहे थे, इसलिए कभी-कभी गलत पिक्सेल लाया जा सकता है। मुझे यह भी यकीन था कि कैमरे की गति ओपनजीएल को इंटरपोलेट करने का कारण बनती है जब भी टाइल्स वास्तविक प्रदर्शन पिक्सेल के साथ गठबंधन नहीं होते थे।

जैसा कि यह पता चला है, ओपनजीएल लगभग रास्टर इंजन के रूप में बिल्कुल व्यवहार करता है। जब कैमरा अभी भी होता है, तो प्रत्येक वर्चुअल पिक्सेल डिस्प्ले पर पूरी तरह से पिक्सेल से मेल खाता है। जब कैमरा गतिशील होता है, तो टाइल्स इंटरपोलेशन के माध्यम से सुचारू रूप से आगे बढ़ने के बजाय एक समय में एक पिक्सेल पंक्ति/कॉलम "स्नैप" करता है। (यह तब भी होता है जब गति बहुत धीमी हो।) जिज्ञासा से, मैंने अपनी टाईल्स को 1.1x तक स्केल करने की कोशिश की, और जैसा कि मैंने उम्मीद की, वे गंदे लगने लगे और स्नैपिंग व्यवहार समाप्त हो गया। क्या यह सच है, तो ओपनजीएल अलग-अलग व्यवहार करता है इस पर निर्भर करता है कि क्या यह प्रतिपादन सामग्री को पूरी तरह से डिज़ाइन किया जा सकता है?

जहां मैं इन मुद्दों के बारे में जानकारी प्राप्त कर सकता हूं, और मैं यह कैसे सुनिश्चित कर सकता हूं कि ओपनजीएल इस तरह से व्यवहार कर रहा है? मुझे एक डिफ़ॉल्ट का उपयोग करके असहज महसूस होता है जिसे मैं समझ में नहीं आता, क्योंकि व्यवहार किसी भी समय सैद्धांतिक रूप से बदल सकता है।

धन्यवाद!

उत्तर

3

जहां मैं इस व्यवहार के बारे में जानकारी प्राप्त कर सकता हूं, और मैं यह कैसे सुनिश्चित कर सकता हूं कि ओपनजीएल इस तरह से व्यवहार कर रहा है?

आपको विनिर्देशन में पूरे "रास्टरराइजेशन" अध्याय को पढ़ने की आवश्यकता है। यह वास्तव में वर्णन करता है कि क्या गारंटी है और ओपनजीएल कार्यान्वयन कैसे काम करना चाहिए;

मुझे डिफ़ॉल्ट रूप से असहज महसूस होता है जिसे मैं समझ में नहीं आता, क्योंकि व्यवहार किसी भी समय सैद्धांतिक रूप से बदल सकता है।

दाएं। जहां तक ​​मैं आपकी परिस्थिति में समझता हूं, व्यवहार अच्छी तरह से परिभाषित किया जाता है। हालांकि, ध्यान रखें कि विनिर्देश कार्यान्वयन के लिए कुछ स्वतंत्रता देता है ताकि परिणाम एक कार्यान्वयन से दूसरे में भिन्न हो सकें। उदाहरण के लिए x1.1 स्केलिंग या ग्रिड के 20 डिग्री रोटेशन में, किनारों का सटीक raterization पहले ही कार्यान्वयन परिभाषित किया गया है।

ध्यान दें कि "स्नैप" व्यवहार की अपेक्षा की जाती है। आपके पास एए सक्षम नहीं है, इसलिए ओपनजीएल आंदोलन को किसी भी चिकनी नहीं बना सकता है।

संबंधित मुद्दे