मैंने कई एंड्रॉइड ऐप्स लिखे हैं, लेकिन यह 3 डी प्रोग्रामिंग के साथ मेरा पहला अनुभव है।अप्रत्याशित रूप से काम कर रहे कमरे के अंदर प्रकाश स्रोत
मैंने अंदर कुछ ऑब्जेक्ट्स के साथ एक कमरा (4 दीवारें, छत और मंजिल) बनाया है और चलने जैसे कैमरे को स्थानांतरित करने में सक्षम हूं। मैंने विभिन्न छवियों के साथ सभी सतहों को बना लिया है और सबकुछ अपेक्षित के रूप में काम कर रहा था।
संदर्भ के लिए, कमरा 14 इकाइयां चौड़ा है और 16 इकाइयां गहरी (मूल पर केंद्रित), 3 इकाइयां ऊंची (मूल से ऊपर 1 और नीचे 2) हैं। कमरे के बीच में 2 वस्तुएं हैं, एक घन और इसके ऊपर एक उल्टा पिरामिड है।
तब मैं घन और पिरामिड छाया करने के लिए एक प्रकाश स्रोत जोड़ने गया। मैंने कुछ नेहे के बंदरगाहों के माध्यम से पढ़ा और पीछा किया था, इसलिए मैंने जो कुछ भी प्रकाश में पाठ में काम किया था और इसे मेरे नए कोड पर लागू किया।
gl.glEnable(GL10.GL_LIGHTING);
gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_AMBIENT, new float[] { 0.1f, 0.1f, 0.1f, 1f }, 0);
gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_DIFFUSE, new float[] { 1f, 1f, 1f, 1f }, 0);
gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_POSITION, new float[] { -4f, 0.9f, 6f, 1f }, 0);
gl.glEnable(GL10.GL_LIGHT0);
परिणाम यह है कि घन और पिरामिड छायांकित नहीं हैं। वे प्रकाश के विरोध में पक्षों पर समान दिखते हैं क्योंकि वे पक्षों के पक्ष में करते हैं। जब कैमरे को प्रकाश स्रोत से सीधे इंगित किया जाता है तो कमरे को प्रकाश कोड जोड़ने से पहले ऐसा लगता है। जैसे ही मैं कैमरे को प्रकाश स्रोत का सामना करने के लिए घूमता हूं, कैमरा पूरी तरह से काला होने तक पूरी तरह से काला होने तक ऑब्जेक्ट समेत (जब ऑब्जेक्ट्स सहित) गहरा हो जाता है।
यहां क्या हो रहा है? मैंने प्रकाश पर कई लेख पढ़े और यह कैसे काम करता है, लेकिन मैंने यह इंगित करने के लिए कुछ भी नहीं देखा है कि यह कमरे के सभी किनारों को क्यों प्रकाश नहीं देगा, घन और पिरामिड प्रकाश की स्थिति के आधार पर छायांकित होगा। क्या प्रकाश के कुछ अपेक्षित व्यवहार हैं क्योंकि यह कमरे के अंदर "अंदर" है? क्या मैं बस कुछ आसान याद कर रहा हूं क्योंकि मैं नया हूं?
आह! ठीक है, मैंने नेहे के नमूने में glNormal3f को कॉल करने वाली लाइनों को याद रखा क्योंकि वह सभी आसान सतहों का उपयोग कर रहा था और जैसा कि आपने दिखाया है उन्हें गणना करने की आवश्यकता नहीं थी। चूंकि मैंने कमरे को स्ट्रिप्स और प्रशंसकों से पूरी तरह से बाहर कर दिया है, इसलिए मुझे परीक्षण करने से पहले कुछ सामान्यीकृत करने की आवश्यकता होगी। मैं मानदंडों की गणना पर विस्तृत स्पष्टीकरण की सराहना करता हूं। – atheaos
बहुत बढ़िया जवाब! – Tak