2011-10-12 13 views
5

में विभिन्न ऑब्जेक्ट्स के लिए अलग-अलग सामग्री गुणों को सेट करना ओपनजीएल में खींची गई विभिन्न वस्तुओं के लिए अलग-अलग भौतिक गुण कैसे हो सकता है?ओपनजीएल

//************** Object 1 ************** 
glEnable(GL_COLOR_MATERIAL); 
glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); 
glColor4f(149.0/255.0, 78.0/255.0, 22.0/255.0, 1.0); 
float mat_specular[] = {0.992157, 0.941176, 0.807843, 1.0}; 
float shininess = 10; 

glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); 
glMaterialf(GL_FRONT, GL_SHININESS, shininess); 

glPushMatrix(); 
glTranslatef(0, 3.0, 0); 
drawSphere(0.1, 0.1, 0.1); 
glRotatef(10, 1, 0, 0); 

glDisable(GL_COLOR_MATERIAL); 


//************** Object 2 ***************** 
glEnable(GL_COLOR_MATERIAL); 
glColorMaterial(GL_FRONT, GL_DIFFUSE); 
glColor4f(48.0/255.0, 48.0/255.0, 48.0/255.0, 1.0); 
float mat_specular_2[] = {0.992157, 0.941176, 0.807843, 1.0}; 
float shininess_2 = 10; 

glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular_2); 
glMaterialf(GL_FRONT, GL_SHININESS, shininess_2); 

glPushMatrix(); 
glTranslatef(-0.6, 0.2, 1.6/2.0); 
drawSphere(0.1, 0.1, 0.1); 
glPopMatrix(); 

glDisable(GL_COLOR_MATERIAL); 

जब गाया, रंग वस्तु 2 के लिए निर्धारित पूरे दृश्य के लिए प्रयोग किया जाता है: मैं निम्नलिखित कोड है, जो जाहिरा तौर पर केवल बाद में रंग से पता चलता था। इसलिए ऑब्जेक्ट 1 को ऑब्जेक्ट 2 के रंग में भी पहले से ही अपना रंग सेट होने के बावजूद प्रस्तुत किया जाता है।

मेरे पास अलग-अलग भौतिक गुणों के लिए 2 ऑब्जेक्ट्स कैसे हो सकते हैं ताकि उन्हें पूरे दृश्य में केवल एक रंग के बजाय अलग-अलग रंगों के रूप में प्रदर्शित किया जा सके?

+1

क्या हम drawSphere() कृपया देख सकते हैं? – Calvin1602

उत्तर

1

पहला, आपका उदाहरण कोड उचित दिखता है और आपकी वस्तुओं में वास्तव में अलग-अलग सामग्री होनी चाहिए।

लेकिन ध्यान रखें कि आप केवल अपनी दूसरी वस्तु के लिए फैलाने वाले भौतिक रंग को बदलते हैं, क्योंकि आप दोनों ऑब्जेक्ट्स के लिए बिल्कुल वही स्पेकुलर रंग और चमकदार मूल्य निर्धारित करते हैं। और दूसरी वस्तु का परिवेश भी पहले जैसा ही है, क्योंकि आप केवल फैलाने वाले चैनल के लिए रंग सामग्री सक्षम करते हैं, इसलिए परिवेश को पहली वस्तु से अपरिवर्तित किया जाता है, ओपनजीएल एक राज्य मशीन है।

तो वस्तुओं के बीच एकमात्र भौतिक अंतर उनका फैला हुआ रंग है और यह अंतर (101, 30, 26) है। तो क्या यह हो सकता है कि यह अंतर केवल परिवेश और specular शर्तों से अधिक भारित है जो पूरी तरह से बराबर हैं और इसलिए आपके लिए नोटिस करने के लिए बहुत छोटा है? पूरी तरह से अलग सामग्री का प्रयास करें और देखें कि वास्तव में कोई अंतर नहीं है या नहीं।

0

ऐसा लगता है कि आपने पहली वस्तु को चित्रित करने के बाद glPopMatrix को याद किया है। मुझे नहीं पता कि इससे चीजें कैसे बदलेगी।

+2

आपको यह समझ में नहीं आता कि 'glPopMatrix() 'के लिए क्या उपयोग किया जाता है। आपका उत्तर समस्या को हल करने में मदद नहीं करता है। –

3

आप रखना चाहिए:

glEnable(GL_COLOR_MATERIAL); 

अपने कार्य प्रस्तुत करना में पहली बात यह है के रूप में, तो प्रकाश पैरामीटर सेट:

glDisable(GL_COLOR_MATERIAL); 
glPushMatrix(); 

तो सामग्री के गुणों को सेट और वस्तु कहते हैं।

glDisable(GL_COLOR_MATERIAL); 

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