2012-02-16 16 views
9

मैं ओपनजीएल ईएस 2.0 में जाल मॉडल प्रदर्शित करना चाहता हूं, जहां यह स्पष्ट रूप से वास्तविक जाल दिखाता है, इसलिए मैं प्रत्येक आदिम/त्रिभुज में चिकनी छायांकन नहीं चाहता हूं। केवल दो विकल्प मैं बारे में सोच सकते त्रिकोण की सतह के लिए सभी लंबवत होंक्या मैं ओपनजीएल ईएस में प्रति फेस सामान्य निर्दिष्ट कर सकता हूं और गैर-चिकनी/फ्लैट छायांकन प्राप्त कर सकता हूं?

  1. प्रत्येक त्रिकोण normals के अपने स्वयं के सेट है, (लेकिन फिर मुझे लगता है मैं इस विकल्प के साथ त्रिकोण के बीच कोने साझा नहीं कर सकते)
  2. काले लाइनों का उपयोग कर त्रिकोण/आदिम किनारों इंगित और साझा कोने के साथ सामान्य तरीके से करने के लिए छड़ी और प्रत्येक शिखर

के लिए एक सामान्य इसे इस तरह होने के लिए है? मैं प्राइमेटिव्स में बस क्यों नहीं पढ़ सकता और किसी भी मानक को निर्दिष्ट नहीं करता हूं और किसी भी तरह ओपनजीएल ईएस 2.0 प्रत्येक चेहरे पर एक फ्लैट छाया बना देता है?

इसी प्रकार के प्रश्न Similar Stackoverflow question, but no suggestion to solution

+0

क्या आपको इसका उत्तर मिला? –

उत्तर

7

चूंकि आदेश अपने जाल पर लकीर खींचने की क्रिया के लिए में (किसी भी, चिकनी या फ्लैट), आप एक प्रकाश मॉडल की जरूरत है, और OpenGL ES यह लगता है कि नहीं कर सकते। जीएल ईएस 2 में कोई निश्चित पाइपलाइन नहीं है, इसलिए आप किसी भी अंतर्निर्मित फ़ंक्शन का उपयोग नहीं कर सकते हैं जो आपके लिए नौकरी करेगा (अंतर्निर्मित प्रकाश मॉडल का उपयोग करके)।

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

फिर, एक जीपीयू एक समानांतर तरीके से काम करता है, एक ही समय में कई शिखर (और तब टुकड़े) को संसाधित करता है। कुशल होने के लिए, यह डेटा को जोड़ों के बीच साझा नहीं कर सकता है। यही कारण है कि आपको प्रत्येक चरम के लिए मानक दोहराने की आवश्यकता है।

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

+0

क्या यह ओपनजीएल (गैर-ईएस) के बारे में भी सच है? – Rick

+0

ओपनजीएल की विरासत निश्चित पाइपलाइन है, लेकिन इसका उपयोग करने की अनुशंसा नहीं की जाती है। अधिक जानकारी के लिए यह आलेख देखें: https://www.opengl.org/wiki/Fixed_Function_Pipeline – Benlitz

+0

धन्यवाद। जो मैं प्राप्त करने की कोशिश कर रहा हूं वह साझा एक्सपिस की एक सरणी को पार करने के लिए ओएस एक्स 10.10 (या 10.11) में सीनकेकिट का उपयोग कर रहा है, त्रिकोण के लिए सूचकांक की एक सरणी है, और इसे फ्लैट-छाया है। इसके नीचे ओपनजीएल या धातु का उपयोग करता है, लेकिन मुझे इसके बारे में पर्याप्त जानकारी नहीं है। यह लेखक (http://ronnqvi.st/custom-scenekit-geometry/) ऐसा लगता था कि यह ओपनजीएल कुछ नहीं कर सकता था, इसलिए मैं यह देखने के लिए देख रहा हूं कि यह कर सकता है, और इस तरह मुझे यह SO सवाल मिला । – Rick