2013-02-14 47 views
5

में ओपनएल में पूर्ववत कार्यक्षमता को कार्यान्वित करने के लिए कैसे करें मैं एक एंड्रॉइड ऐप विकसित कर रहा हूं जो छवि को विकृत करता है। मैं छवि को विकृत करने के लिए ओपनगल अनुवाद और स्केल फ़ंक्शन का उपयोग कर रहा हूं। छवि ठीक विकृत हो रही है.अब मैं पूर्ववत सुविधा को कार्यान्वित करना चाहता हूं। लेकिन कार्यक्षमता को लागू करने में असमर्थ। कोई भी Opengl में पूर्ववत कार्यक्षमता को कार्यान्वित करने में मदद कर सकता है। कोई भी सुझाव या कोड उपयोगी होगा। अग्रिम धन्यवाद।एंड्रॉइड

+1

इसका ओपनजीएल के साथ कुछ लेना देना नहीं है। ओपनजीएल सिर्फ यह खींचता है कि आप इसे आकर्षित करने के लिए क्या कहते हैं। कोई भी पूर्ववत कार्यक्षमता उस चीज़ को बदलने के बारे में है जो आप इसे बताते हैं कि वह क्या होता है। –

+0

@ निकोलबोलस वास्तव में मैं उंगली स्पर्श पर छवि विकृत कर रहा हूं। छवि सिकुड़ या उछाल। सवाल यह है कि, मुझे क्या स्टोर करना चाहिए और इसे देखने पर कैसे प्रतिबिंबित करना चाहिए। –

+0

मेरा मानना ​​है कि आपको प्रत्येक स्पर्श शुरू करने पर वर्तमान छवि को स्टोर करना चाहिए। फिर जब पूर्ववत किया जाता है, तो बस वर्तमान छवि को छोड़ दें और कतार में अंतिम छवि के साथ इसे प्रतिस्थापित करें। ओपनग्ल का उपयोग करके कुछ ऑपरेशन उलटा जा सकता है, लेकिन मुझे नहीं लगता कि आपको यहां ऐसी सुविधाओं का उपयोग करना चाहिए। बस मूल और प्रत्येक ऑपरेशन को आपने अंगूठी के साथ किया, या प्रत्येक चरण के लिए छवि को स्टोर करें। – Pihhan

उत्तर

0

रे Tayek सही है। कमांड पैटर्न का प्रयोग करें। यही है, उपयोगकर्ता द्वारा किए जाने वाले हर क्रिया के लिए, आप उस क्रिया (कमांड) और पूर्ववत स्टैक पर उस क्रिया से संबंधित किसी भी डेटा को दबाते हैं।

चलो सादगी के लिए एक पेंट प्रोग्राम देखें। प्रक्रिया सीधे आपके ओपनजीएल ऐप पर लागू होती है। उपयोगकर्ता x1, y1 से x2, y2 से एक रेखा खींचता है। आदेश कुछ इस तरह का प्रतिनिधित्व किया जा सकता है:

command = DrawLine 
data = x1, y1, x2, y2 

आप शायद पूर्ववत डेटा के लिए कम से कम दो वर्गों आवश्यकता होगी, लेकिन वे छोटे और आसानी से लागू होगी। जब उपयोगकर्ता पूर्ववत करना चाहता है, तो केवल पूर्व ऑब्जेक्ट को पूर्ववत स्टैक से पॉप करें, इसे देखें, और संबंधित पूर्ववत कार्रवाई (प्रत्येक प्रकार के कमांड के लिए विशिष्ट) को ले जाएं। या, आप प्रत्येक कमांड ऑब्जेक्ट में पूर्ववत कार्रवाई भी शामिल कर सकते हैं। फिर रेडो स्टैक पर पूर्ववत कमांड को दबाएं।

यह आपको प्रारंभ करने के लिए पर्याप्त होना चाहिए। एचटीएच

+0

मैं ऊपर अपना जवाब संशोधित करता हूं। 3 डी ग्राफिक्स के लिए, डीडब्ल्यूबी का एक अच्छा दृष्टिकोण है। अपने पूर्ववत डेटा के हिस्से के रूप में अनलर्टेड छवि का उपयोग करें। – Frecklefoot

2

मुझे संदेह है कि कमांड पैटर्न आपकी स्थिति के लिए पर्याप्त नहीं है। यह मेरी धारणा पर आधारित है कि छवि विरूपण को उलटना आसान नहीं है, भले ही आपको पता चले कि विरूपण किस प्रकार लागू किया गया था।

इसके बजाय, आपको विरूपण को लागू करने से पहले छवि को ढेर पर धक्का देना होगा। फिर, पूर्ववत कार्यान्वयन वर्तमान छवि को स्टैक पर छवि के साथ प्रतिस्थापित करेगा। यह फिर से और पूर्ववत के संयोजन से होने वाले संभावित दिलचस्प मुद्दों का कारण बन जाएगा।

आप इसे उन परिवर्तनों के लिए कमांड ऑब्जेक्ट्स को संग्रहीत कर सकते हैं जो आसानी से उलटा हो सकता है और उन परिवर्तनों के लिए छवियों को संग्रहीत कर सकता है जो आसानी से उलट नहीं जा सकते हैं।