2010-01-25 14 views
6

मैं एक मेषजीमेट्री 3 डी बनाकर और इसमें चरम और मानक जोड़कर WPF 3 डी के साथ एक दृश्य प्रस्तुत कर रहा हूं। सबकुछ प्रस्तुत दृश्य में अच्छा दिखता है (रोशनी वहां हैं, सामग्री ठीक लगती है), लेकिन जहां जाल त्रिकोण ओवरलैप होता है, कैमरे के करीब त्रिकोण को शीर्ष पर जरूरी नहीं है। ऐसा लगता है कि वे एक यादृच्छिक क्रम में खींचे जा रहे हैं। क्या कोई तरीका है कि मैं यह सुनिश्चित कर सकता हूं कि जाल त्रिकोण "सही" क्रम में प्रस्तुत किए जाते हैं?डब्ल्यूपीएफ 3 डी त्रिकोण ओवरलैप समस्या

var mesh = new MeshGeometry3D(); 

foreach (var item in objectsToTriangulate) { 
    var triangles = item.Triangulate(); 
    foreach (var triangle in triangles) { 
     mesh.Positions.Add(triangle.Vertices[0]); 
     mesh.Positions.Add(triangle.Vertices[1]); 
     mesh.Positions.Add(triangle.Vertices[2]); 
     mesh.Normals.Add(triangle.Normal); 
     mesh.Normals.Add(triangle.Normal); 
     mesh.Normals.Add(triangle.Normal); 
    } 
} 

geometryModel.Geometry = mesh; 

संपादित करें:: त्रिकोण में से कोई भी एक दूसरे को काटना (

<Viewport3D> 
    <ModelVisual3D> 
     <ModelVisual3D.Content> 
      <Model3DGroup> 
       <AmbientLight Color="#FF5A5A5A" /> 
       <GeometryModel3D x:Name="geometryModel"> 
        <GeometryModel3D.Material> 
         <DiffuseMaterial Brush="DarkRed"/> 
        </GeometryModel3D.Material> 
       </GeometryModel3D> 
      </Model3DGroup> 
     </ModelVisual3D.Content> 
    </ModelVisual3D> 
</Viewport3D> 

और कोड में, मैं इस तरह की जाली कुछ पैदा कर रहा हूँ:

बस के मामले में यह मदद करता है, यहाँ मेरी XAML है किनारों को छोड़कर), और कभी-कभी त्रिकोण जो शीर्ष पर दिखाई देता है वास्तव में दूसरे के पीछे रास्ता है, इसलिए मुझे नहीं लगता कि यह त्रिकोणों के 3 डी सॉर्टिंग के साथ एक अस्पष्टता है, क्योंकि रे बर्न्स ने सुझाव दिया है।

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

उत्तर

6

डब्ल्यूपीएफ में, अधिकांश 3 डी सिस्टमों में, एक सरल धारणा यह सुनिश्चित की जाती है कि किसी दिए गए त्रिभुज को किसी अन्य दिए गए त्रिभुज के सामने पूरी तरह से या पूरी तरह से झूठ बोलने के लिए माना जाता है। लेकिन वास्तव में यह हमेशा जरूरी नहीं है। विशेष रूप से, यदि दो त्रिभुज अपने अंदरूनी हिस्सों (केवल उनके किनारों पर नहीं) के साथ छेड़छाड़ करते हैं और उनकी इंटिज़क्शन लाइन के साथ नहीं देखे जाते हैं, तो एक सटीक प्रतिपादन व्यूपोर्ट के हिस्से के लिए प्रत्येक त्रिकोण मोर्चा को पेंट करेगा।

इस धारणा के कारण, 3 डी इंजन कैमरे से एक निश्चित दूरी होने के लिए पूरे त्रिभुज पर विचार करके त्रिकोणों को क्रमबद्ध करते हैं। यह त्रिभुज के निकटतम कोने, सबसे दूर कोने, औसत कोनों का चयन कर सकता है, या कुछ अन्य एल्गोरिदम का उपयोग कर सकता है लेकिन अंत में यह जेड ऑर्डर की गणना के लिए एक प्रतिनिधि बिंदु का चयन करता है।

मेरा अनुमान है कि आपके त्रिभुजों को इस तरह से संरचित किया जाता है कि प्रतिनिधि बिंदु जेड ऑर्डर की गणना के लिए उपयोग किया जाता है जिससे उन्हें एक अप्रत्याशित क्रम में प्रदर्शित किया जा सकता है।

संपादित

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

यहाँ मेरी विचार कर रहे हैं:

  1. हो सकता है कि आपके BackMaterial सेट नहीं है या पारदर्शी, आप केवल त्रिकोण जिसका क्रम घुमावदार अपने नजरिए से दक्षिणावर्त है देखने के लिए कारण। आपके वास्तविक जाल के आधार पर, गायब अदृश्य त्रिभुज इसे प्रकट कर सकते हैं कि पीछे के लोग उन्हें ओवरलैप कर रहे हैं जब वास्तविक तथ्य में वे केवल उनके माध्यम से दिखाई दे रहे हैं। यह तब भी हो सकता है जब आपकी सामग्री सेट नहीं की गई थी या पारदर्शी थी।

  2. कुछ स्पष्ट रूप से त्रिकोणों को प्रदर्शित करने के क्रम को निर्धारित कर रहा है। क्या यह आपके त्रिकोण इंडेक्स सरणी का ऑर्डर हो सकता है? यदि आप यादृच्छिक रूप से किसी भी अन्य परिवर्तन किए बिना त्रिकोण इंडेक्स सरणी (तीनों के सेट में) को यादृच्छिक रूप से पुन: व्यवस्थित करते हैं, तो क्या यह प्रदर्शन बदलता है?यदि ऐसा है, तो आपने समस्या के बारे में कुछ सीखा है और शायद एक वर्कअराउंड मिला है (यदि यह त्रिकोण इंडेक्स ऑर्डर का उपयोग कर रहा है, तो आप स्वयं को सॉर्ट कर सकते हैं)।

  3. यदि आप प्रोजेक्शन कैमरे या ऑर्थो ग्राफिक कैमरे का उपयोग कर रहे हैं, तो पासप्लेनडिस्टेंस और फ़ारप्लेनडिस्टेंस सेट उचित रूप से सेट हैं? एक गलत पासप्लेनडिस्टेंस विशेष रूप से आपके आस-पास के त्रिभुजों को अदृश्य बना सकता है, जिससे यह दिखाई देता है कि त्रिभुजों को आगे बढ़कर वास्तव में शीर्ष पर खींचा जा रहा है। गलत दूरी गहराई बफर की ग्रैन्युलरिटी को भी प्रभावित कर सकती है, जो आपको वह प्रभाव दे सकती है जो आप अनुभव कर रहे हैं।

  4. क्या आपका मॉडल बेहद बड़ा या बेहद छोटा है? यदि आप मॉडल और कैमरा स्थिति को स्केल करते हैं, तो क्या इससे कोई फर्क पड़ता है? गहराई बफर आम तौर पर 32 बिट पूर्णांक होते हैं, इसलिए अत्यंत छोटे मॉडल में दो त्रिकोणों को एक ही गहराई बफर मूल्य के लिए बंद करना संभव है। यह आपके द्वारा वर्णित प्रभाव का भी कारण बनता है।

  5. ऐसा हो सकता है कि आप एक बग का सामना कर रहे हों। आप कुछ बदलावों को देखने के लिए प्रयास कर सकते हैं कि वे समस्या को प्रभावित करते हैं, उदाहरण के लिए आप सॉफ़्टवेयर-केवल प्रतिपादन, विभिन्न प्रकाश प्रकार (फैलाने वाले बनाम specular, आदि), विभिन्न कैमरा प्रकार, एक अलग विक्रेता से एक ग्राफिक्स कार्ड आदि का प्रयास कर सकते हैं।

मुझे आशा है कि इनमें से कुछ विचार मदद करेंगे।

+0

सहायता के लिए धन्यवाद। मुझे नहीं लगता कि यह मुद्दा है, जैसा कि मैंने प्रश्न के संपादन में समझाया है। कोई और विचार? अपने साइड नोट के बारे में: मुझे अद्वितीय शिखर निर्दिष्ट करने की क्षमता के बारे में पता है और फिर 'त्रिकोण इंडेक्स' जोड़ें (...) 'पर कॉल करें, लेकिन मैंने ऐसा नहीं किया है क्योंकि मैं चाहता हूं कि मेरे सभी जाल पहलुओं को अपने सामान्य (आमतौर पर मैं फ्लैट सतहों के साथ वस्तुओं को प्रतिपादित कर रहा हूं और मुझे एक चिकनी जाल नहीं चाहिए)। क्या डुप्लिकेट शिखर होने के लिए बुरा है, या क्या कुछ भी नहीं किया जाना चाहिए, अलग-अलग मानदंडों की मेरी इच्छा को देखते हुए? –

+0

मैंने शिखर साझा करने के बारे में टिप्पणी ली, क्योंकि यदि आप मानदंडों को नियंत्रित करना चाहते हैं तो आप अलग-अलग शिखरों की आवश्यकता के बारे में सही हैं। मैंने अपने कई अन्य विचार भी जोड़े। उम्मीद है कि कोई और यहां भी झुक जाएगा। –

+0

अच्छा, # 3 यह था! मेरे पास मेरे पासप्लेनडिस्टेंस 0 पर सेट था, और मुझे लगता है कि गहराई बफर के साथ डब्ल्यूपीएफ अधिक आरामदायक है। इसे 0.5 पर सेट करना सबकुछ अच्छा दिखता है। सभी मदद के लिए बहुत बहुत धन्यवाद! –