2013-07-02 5 views
5

तो मेरे पास एक एनीमेशन है कि मैं जावास्क्रिप्ट और एचटीएमएल 5 में कोडिंग कर रहा हूं (कोई पुस्तकालय नहीं, कोई प्लगइन्स नहीं, कुछ नहीं और मैं इसे इस तरह से रहना चाहता हूं)। एनीमेशन एक साधारण तरल अनुकरण करने के लिए भौतिकी (मूल रूप से लोगों से जुड़ी असामान्य स्प्रिंग्स का एक गुच्छा) का उपयोग करता है। कार्यक्रम के इस भाग से आउटपुट ऑब्जेक्ट्स का ग्रिड (2 डी-सरणी) है, प्रत्येक एक जेड वैल्यू के साथ है। यह काफी अच्छी तरह से काम करता है। एचटीएमएल 5 कैनवास में डेटा खींचते समय मेरी समस्या उत्पन्न होती है।एचटीएमएल 5 कैनवास क्रिएटिव अल्फा-ब्लेंडिंग

That's what it looks like. Trust me, it's better when animated.

कि यह कैसा लग रहा है। मेरा विश्वास करो, एनिमेटेड होने पर यह बेहतर होगा।

प्रत्येक डेटा बिंदु के लिए, प्रोग्राम जेड मान द्वारा निर्धारित रंग के साथ एक सर्कल खींचता है। बस इन बिंदुओं को चित्रित करते हुए, ग्रिड पैटर्न दर्दनाक रूप से स्पष्ट है और यह तरल पदार्थ को देखना मुश्किल है। इसे हल करने के लिए, मैंने मंडलियों को बड़ा और अधिक पारदर्शी बना दिया ताकि वे एक-दूसरे को और रंगों को मिश्रित कर सकें, जिससे एक सरल संकल्प धुंध पैदा हो सके। परिणाम दोनों तेजी से और सुंदर था, लेकिन एक छोटी सी दोष के लिए:

के रूप में हलकों क्रम में तैयार कर रहे हैं, उनके रंग मूल्यों समान रूप से ढेर नहीं है, और इसलिए बाद में तैयार हलकों पहले तैयार लोगों को अस्पष्ट। गणितीय रूप से, रेंडरर मंडलियों के रंग-मूल्यों के बार-बार भारित औसत ले रहा है। यह दो सर्किलों के लिए ठीक काम करता है, प्रत्येक को 0.5 * अल्फा_एन का मान देता है, लेकिन तीन सर्कल के लिए, रेंडरर दूसरे सर्कल का औसत दूसरे दो के औसत के साथ लेता है, जिससे नवीनतम सर्कल 0.5 * अल्फा_एन का मान देता है, लेकिन पहले की सर्किल प्रत्येक 0.25 * अल्फा_एन का मान है। जैसे ही अधिक मंडल ओवरलैप होते हैं, प्रक्रिया जारी है, नई सर्किलों और पुराने लोगों के प्रति पूर्वाग्रह बना रही है। मैं चाहता हूं कि, इसके बजाय, 0.33 * अल्फा_एन का मान प्राप्त करने के लिए तीन या अधिक मंडलियों में से प्रत्येक के लिए है, ताकि पहले की मंडल अस्पष्ट न हों।

यहां क्रिया में अल्फा-ब्लेंडिंग की एक छवि है। ध्यान दें कि बाद में नीले वृत्त पहले लाल और हरे रंग वाले तैयार धुंधला कर देता है:

Later blue circle obscures earlier drawn ones.

Here's what the problem looks like in action. Notice the different appearance of the left side of the lump.

यहाँ समस्या कार्रवाई में कैसा दिखता है। गांठ के बाईं तरफ की विभिन्न उपस्थिति पर ध्यान दें।

इस समस्या को हल करने के लिए, मैं विभिन्न तरीकों की कोशिश की है:

  • अलग कैनवास का उपयोग करना "मिश्रण-मोड"। "गुणा करें" (जैसा उपरोक्त छवि में देखा गया है) ने चाल की, लेकिन दुर्भाग्यपूर्ण रंग विकृतियां बनाईं।
  • ड्राइंग कॉल एक साथ लंपिंग। प्रत्येक सर्कल को एक अलग कैनवास पथ बनाने के बजाय, मैंने उन सभी को एक साथ लंपने की कोशिश की। दुर्भाग्यवश, यह अलग-अलग भरने वाले रंगों के साथ असंगत है और, और भी, पथ मैट, मोनोटोन सिल्हूट बनाने, बिल्कुल खुद के साथ मिश्रण नहीं किया गया है।
  • ड्राइंग-ऑर्डर इंटरलसिंग। मंडलियों को 0 से एन क्रम में खींचने के बजाय, मैंने पहले शाम को और फिर बाधाओं को चित्रित करने की कोशिश की। इसने केवल आंशिक रूप से समस्या को हल किया, और एक भयानक परत पैटर्न बनाया जिसमें बाधाओं के ऊपर की तरफ बहने लगते थे।
  • putImageData का उपयोग करके अपना खुद का मिश्रण मोड बनाना। मैंने जावास्क्रिप्ट का उपयोग करके मेरी ज़रूरतों के अनुरूप मैनुअल पिक्सेल-शेडर बनाने की कोशिश की, लेकिन, जैसा कि अपेक्षित था, यह बहुत धीमी थी।

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

+0

पुनश्च: मैं जावास्क्रिप्ट और एचटीएमएल 5 में काफी कुशल हूँ, इसलिए तुम मुझे कुछ भी सिखाने की जरूरत नहीं है। इसके अलावा, अगर यह आपके लिए एक छोटी सी समस्या की तरह लगता है, तो ध्यान रखें कि मैं आपको जवाब देने के लिए मजबूर नहीं कर रहा हूं। यह सिर्फ मुझे परेशान करता है और मैं इसे हल करने पर काम करना चाहता हूं। – mindoftea

+4

हानिकारक ऑप्टिकल भ्रम, आपकी छवियां तब भी एनिमेटेड दिखती हैं जब वे नहीं हैं। – Philipp

+0

क्या कोई मुझे बता सकता है कि नीचे वोट क्यों? – mindoftea

उत्तर

2

आप दो समूहों (evens और बाधाओं), कोई ओवरलैप है ऐसी है कि वहाँ में अपनी मंडलियों विघटित कर सकते हैं

  1. पृष्ठभूमि साफ
  2. की 1.0 (अपारदर्शी)
  3. एक अल्फा के साथ evens ड्रा: एक समूह के भीतर हलकों के बीच में, निम्न क्रम वांछित प्रभाव देना चाहिए 10
  4. 1.0 (अपारदर्शी) के एक अल्फा के साथ बाधाओं ड्रा
  5. 0,5

स्थान जो न तो evens और न ही बाधाओं के अंतर्गत आते हैं पृष्ठभूमि दिखाएगा की एक अल्फा के साथ evens ड्रा। जो लोग केवल शाम से ढके होते हैं वे भी 100% अस्पष्टता पर शाम दिखाएंगे। बाधाओं से ढके हुए लोग 100% अस्पष्टता के साथ बाधाओं को दिखाएंगे। दोनों द्वारा कवर किए गए 50% मिश्रण दिखाएंगे।

अन्य तरीकों से एक वस्तुओं के तीन या अधिक सेट मिश्रण करने के लिए प्रयास करने के लिए उपयोग कर सकते हैं कर रहे हैं, लेकिन यह कर "ठीक" जटिल है। यदि एक से तीन या अधिक छवियों कि उनके अल्फ़ा चैनल के अनुसार बार-बार 1 से 0 करने के लिए है, जबकि वैश्विक अल्फा decays सभी चित्रों को आकर्षित करने के लिए किया जाता है समान रूप से मिश्रित किया जाना चाहिए है एक वैकल्पिक दृष्टिकोण (ध्यान दें कि ऊपर उल्लिखित प्रक्रिया वास्तव में उस करता है, लेकिन यह संख्यानुसार है सटीक जब केवल दो छवियां हैं)। न्यूमेरिकल राउंडिंग मुद्दों इस तकनीक की शुद्धता की सीमा है, लेकिन फिर भी दो या तीन गुजरता कर सटीक सम्मिश्रण के लिए की आवश्यकता होगी की तुलना में कम चरणों का उपयोग करते समय काफी हद तक आदेश देने का कारण दृश्य कलाकृतियों की गंभीरता को कम कर सकते हैं।

संयोग से, यदि मिश्रण का पैटर्न तय किया गया है, तो अलग-अलग कैनवस पर शाम के रूप में, और अपारदर्शी आयत के रूप में, और अल्फा चैनल से घटाने के लिए बहुत अधिक प्रतिपादन करना संभव हो सकता है कैनवास एए की सामग्री "कुकी-कटर" कैनवास या पैटर्न भरें। यदि कोई कुकी-कटर कैनवास की सामग्री की उचित गणना करता है, तो इस दृष्टिकोण का उपयोग कैनवास के दो से अधिक सेटों के लिए किया जा सकता है। कुकी-कटर कैनवास की सामग्री को निर्धारित करना कुछ हद तक धीमा हो सकता है, लेकिन इसे केवल एक बार किया जाना चाहिए।

+0

अच्छा! मैंने सर्किलों को पुन: क्रॉल करने का विचार नहीं किया होगा, लेकिन यह मिश्रण संभावनाओं की एक पूरी नई दुनिया खोलता है! – mindoftea

3

ठीक है, सभी मदद, दोस्तों के लिए धन्यवाद। :) लेकिन, मैं समझता हूं, यह एक अजीब सवाल था और जवाब देना मुश्किल था।

मैं भाग में यहाँ इस डाल रहा हूं ताकि यह भविष्य में दर्शकों के लिए एक संसाधन प्रदान करेगा। मैं अभी भी अन्य संभावित समाधानों में काफी रूचि रखता हूं, इसलिए मुझे आशा है कि अगर कोई विचार हो तो अन्य लोग उत्तर पोस्ट करेंगे।

वैसे भी, मैं अपने दम पर एक समाधान पता लगा: हलकों बनाने से पहले, मैं उन पर एक comb sort किया z के मूल्य द्वारा ताकि उन्हें डाल करने के लिए, तो उन्हें रिवर्स में आकर्षित किया। नतीजा यह था कि उच्चतम मूल्यवान वस्तुएं (जो दर्शकों के नजदीक होनी चाहिए) आखिरी बार खींची गई थीं, और इसलिए अन्य मंडलियों द्वारा अस्पष्ट नहीं थे। नतीजा यह है कि अस्पष्ट प्रभाव अभी भी वहां है, लेकिन अब यह इस तरह से होता है जो ज्यामिति के साथ समझ में आता है। यहाँ अनुकरण इन संशोधनों के साथ कैसा दिखता है, ध्यान दें कि यह अब सममित है:

Normal use Lump test

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