2010-02-25 20 views
9

मैं चांदी की रोशनी या डब्ल्यूपीएफ (लगभग 1000-10000) के भीतर कई सर्किल या छोटे ग्राफिक्स को जितनी जल्दी हो सके उतनी बार प्रस्तुत करना चाहता हूं। अगर मुझे डीएक्स या ओजीएल जाना है, तो यह ठीक है, लेकिन मैं इसे पहले दो फ्रेमवर्कों में से किसी एक के भीतर करने के बारे में सोच रहा हूं (पढ़ना: यह ठीक है अगर उत्तर केवल WPF-only या Silverlight-only है)। इसके अलावा, अगर डब्ल्यूएक्स के माध्यम से डब्ल्यूएक्स तक पहुंचने का तरीका है और उस तरह से सतह पर प्रस्तुत करना है, तो मुझे इसमें भी रूचि होगी।सी #/सिल्वरलाइट/डब्ल्यूपीएफ/फास्ट रेंडरिंग सर्किल

तो, सर्किल लोड करने का सबसे तेज़ तरीका क्या है? वे आवश्यकतानुसार सादा हो सकते हैं, लेकिन उन्हें त्रिज्या होने की आवश्यकता है। वर्तमान में मैं प्रत्येक सर्कल के लिए DrawingVisual और DrawingContext.DrawEllipse() कमांड का उपयोग कर रहा हूं, फिर दृश्य को RenderTargetBItmap में प्रस्तुत करता हूं, लेकिन सर्कल की संख्या बढ़ने के साथ यह बहुत धीमी हो जाती है।

वैसे, ये मंडलियां प्रत्येक फ्रेम को स्थानांतरित करती हैं, इसलिए कैशिंग वास्तव में एक विकल्प नहीं है जब तक आप व्यक्तिगत मंडलियों को कैशिंग करने का सुझाव नहीं देते। । । लेकिन उनके आकार गतिशील हैं, इसलिए मुझे यकीन नहीं है कि यह एक महान दृष्टिकोण है।

+1

बस उत्सुक, आपकी ड्राइंग 10000 गतिशील आकार वाली मंडलियां क्यों हैं? – NotDan

+0

यह एक खेल के लिए है। वे सब बढ़ सकते हैं और सिकुड़ सकते हैं और क्या नहीं। –

+0

नोट, संपादन करके, मुझे प्रश्न का कोई स्वामित्व नहीं मिला है। इसके अलावा, एसओ पर प्रवृत्ति ** ** ** बधाई नहीं है (उदा। "हाय", "हैलो", "मुझे आशा है कि आप मेरी मदद कर सकते हैं") या हस्ताक्षर (जैसे "-वाल्ट डब्ल्यू")। अधिक जानकारी के लिए, मेटा स्टैक ओवरफ्लो पर पोस्ट देखें: http://meta.stackexchange.com/questions/28416/what-is-the-policy-on-ignature-and-links-in-answers-for-stack -ओवरफ्लो-प्रश्न – casperOne

उत्तर

6

चेक बाहर this article है। यह वर्णन करता है कि आप जो कुछ भी खोज रहे हैं वह काफी कुछ करने के लिए कैसे करें।

+0

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

+0

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

+0

मुझे लगता है कि आपका क्या मतलब है; क्षमा करें, पहले देखो बहुत तेज था। मैं इसे और अधिक देख लूंगा। –

5

सिल्वरलाइट 3.0+ में, सबसे अधिक संभावना है कि आप इसके लिए WriteableBitmap का उपयोग करेंगे। डब्ल्यूपीएफ में यह भी एक अच्छा विकल्प हो सकता है।

मैंने सिल्वरलाइट में दो डेमो अनुप्रयोगों को लिखा था। वे छोटी छोटी गाड़ी हो सकती हैं, लेकिन वे बिंदु का प्रदर्शन करते हैं।

  1. Hello world application। निश्चित रूप से अनुकूलित किया जा सकता है। प्रदर्शन अच्छा नहीं है, लेकिन ऐसा इसलिए है क्योंकि मैंने कुछ बेवकूफ बना दिया है। मेरा मानना ​​है कि यह है ~ 2 500 दीर्घवृत्त:

alt text http://img42.imageshack.us/img42/5629/helloworld.jpg

  1. Slide show application। मैं यहाँ वस्तुओं की संख्या याद नहीं आ रहा है, लेकिन यह चार्ल्स पेज़ॉल्ड द्वारा जिस तरह से और अधिक से अधिक 10 000.

alt text http://img11.imageshack.us/img11/5264/slideshowa.jpg

+0

मुझे आश्चर्य है कि अंग्रेजी में "रास्ता और अधिक" कहना ठीक है। अगर यह मूर्खतापूर्ण है तो मेरा मतलब बहुत अधिक था :)। – Anvaka

+0

रास्ता और काम करता है :) मैं इन पर ध्यान दूंगा, हालांकि मैं बहुत अधिक फ़्रेमेटर्स की तलाश में हूं, और ऐसा लगता है कि यह 2500 लंबवत के लिए प्रति फ्रेम एक दूसरा ले रहा है। –

+0

धन्यवाद :)। एक दूसरा वहाँ एक framerate नहीं है। यह प्रारंभिक समय है। Framerate बहुत अधिक है। कोई ठंड नहीं, कोई कूद नहीं, सभी चिकनी। – Anvaka

4

सिल्वरलाइट के लिए WriteableBitmapEx library देखें जो निश्चित रूप से WPF के साथ भी काम करेगा। सर्कल कार्यक्षमता को नमूना समेत this blog post में घुमाया गया था।

+0

इस बारे में प्रश्न - क्या यह आकार भरने का समर्थन करता है? मैं केवल डेमो में रूपरेखा देखता हूं। –

+0

जो नोट के रूप में इतना बुरा नहीं हो सकता है, लेकिन मैं उत्सुक था। –

+0

फिलहाल भरने के लिए कोई समर्थन नहीं है, लेकिन यह सूची में है और निकट भविष्य में लागू किया जाएगा। हालांकि मेरे पास कई अन्य परियोजनाएं भी हैं। :) –

2

यदि आप चाहते हैं कि ड्रॉ एलीप्स का उपयोग न करें - पूर्व आकार और रंगों के लिए अपनी मंडलियां उत्पन्न करें और बिटमैप लिखने का उपयोग करें और आपको पूर्ण बिटबल्ट त्वरण मिलेगा।

यह आपकी पृष्ठभूमि, पारदर्शिता आवश्यकताओं या एंटी एलियासिंग के आधार पर मुश्किल हो सकता है लेकिन यह तेजी से परिमाण के आदेश होगा।

एंटी एलियाज्ड लाइन ड्राइंग का उपयोग करना धीमा है लेकिन ज्यादातर थिग्स के लिए ठीक है क्योंकि यह नतीजे बदलता है परिणाम को कैश किया जा सकता है और आपको परिणाम के साथ कई फ्रेम मिलते हैं।

हालांकि यदि आप जितनी जल्दी हो सके उतना तेजी से आकर्षित करना चाहते हैं तो गैर पारदर्शी बिटमैप्स का उपयोग करें।

2

जबकि आपने पहले ही एक उत्तर स्वीकार कर लिया है, यदि आपको लगता है कि आपको DirectX9 का उपयोग करने की आवश्यकता है (बाद के संस्करणों के साथ इंटर-ऑप थोड़ा कठिन है लेकिन अभी भी किया जा सकता है (हार्डवेयर के आधार पर)) आप D3DImage घटक का उपयोग कर सकते हैं। जो कोडप्रोजेक्ट Here पर विस्तृत है।

दूसरा विकल्प यह है कि आप केवल एक मेजबान WinForms नियंत्रण का उपयोग कर सकते हैं और D3D डिवाइस निर्माण के लिए उस HWND का उपयोग कर सकते हैं।

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