2009-05-26 7 views
7

ओपनजीएल ईएस में glNormal3f का उद्देश्य क्या है? यदि ओपनजीएल ईएस में कोई तत्काल मोड उपलब्ध नहीं है, तो मैं glnormal3f का उपयोग किस प्रकार करूंगा? उदाहरण कोड अच्छा होगा।ओपनजीएल ईएस में glNormal3f का उद्देश्य क्या है?

उत्तर

6

मुझे लगता है कि यह एक ही कारण है कि एक ग्लोकोलर फ़ंक्शन है। यदि आपकी संपूर्ण ज्यामिति का सामान्य सभी शीर्षकों के लिए समान है, तो आप glDrawArrays/glDrawElements को कॉल करने से पहले इसे glnormal के साथ निर्दिष्ट कर सकते हैं।

+0

बिल्कुल यह है .. ओपनजीएल | ES पर glnormal डिफ़ॉल्ट-सामान्य सेट करता है। इम्हो अगर वे समारोह हटा चुके थे तो वे बेहतर प्रदर्शन कर सकते थे। glmultiTexCoord उसी कारण से मौजूद है btw। –

0

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

मुझे यह उत्सुक लगता है कि manual page (ओपनजीएल ES 1.1, वहां) इसका भी उल्लेख नहीं करता है। मुझे एक iPhone programming tutorial (पीडीएफ) मिला जो दावा किया गया कि glNormal() अब और नहीं था।

+0

"जहां कई वर्टिस समान सामान्य साझा करते हैं", क्या आपका मतलब है "जहां किसी दिए गए 'glDrawArrays' कॉल में खींचे गए सभी कोष्ठक समान सामान्य साझा करते हैं"? क्या यह इसकी सही समझ है? – Gravity

0

ओपनजीएल ES 1.1 इसका उल्लेख करता है लेकिन हाँ, आईफोन प्रोग्रामिंग ट्यूटोरियल में यह एक त्रुटि है।

0

अब आप इन कार्यों का उपयोग नहीं करना चाहते हैं। GlXXXXArray() पर चिपके रहें। मुझे संदेह है कि ओपनजीएल को ओपनजीएल ईएस ट्रांसफर को आसान बनाने के लिए वहां बस लटकने वाले ओवर हैं।

0

ओपन में | ES glNormal3f() नहीं एक पदावनत समारोह,
क्योंकि यह फ्लैट 2 डी प्रतिपादन के लिए उपयोगी है आकार {X, Y} विमान में है:

उपयोग करने के बजाय

:

glEnableClientState(GL_NORMAL_ARRAY); 
glNormalPointer(GL_FLOAT, 0, vbuf + normal_offset); 

यह आसान है और यह कॉल करने के लिए कम VBO स्मृति की आवश्यकता है:

glNormal3f(0, 0, 1); 
+1

कोड को टैग करने के तरीके को समझने के लिए स्वरूपण सहायता पढ़ें :-) – kleopatra

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