2011-10-12 8 views
5

The OpenGL® ES Shading Language (v1.00, r17) [PDF] (जोर मेरा) की धारा 5.8 से:क्या आप एक छोटे से वेक्टर को आवंटित करने के लिए glVertexAttribPointer का उपयोग कर सकते हैं?

असाइनमेंट ऑपरेटर lvalue में rvalue-अभिव्यक्ति के मूल्य संग्रहीत करता है और प्रकार और lvalue-अभिव्यक्ति की परिशुद्धता के साथ एक rvalue रिटर्न । लालू-अभिव्यक्ति और रावल-अभिव्यक्ति का एक ही प्रकार होना चाहिए। सभी वांछित प्रकार-रूपांतरणों को एक निर्माता के माध्यम से स्पष्ट रूप से निर्दिष्ट किया जाना चाहिए।

तो यह कुछ इस तरह कर रही कानूनी नहीं होगा की तरह लगता है:

vec3 my_vec3 = vec3(1, 2, 3); 
vec4 my_vec4 = my_vec3; 

और यह कानूनी दूसरी पंक्ति होना चाहिए था बनाने के लिए कुछ की तरह:

vec4 my_vec4 = vec4(my_vec3, 1); // add 4th component 

मुझे लगता है कि glVertexAttribPointer समान आवश्यकताओं थी। यही है, अगर आप vec4 को असाइन कर रहे थे कि size पैरामीटर 4 के बराबर होना चाहिए।

तब मैं GLES20TriangleRenderer sample for Android पर आया। कुछ प्रासंगिक स्निपेट:

attribute vec4 aPosition; 

maPositionHandle = GLES20.glGetAttribLocation(mProgram, "aPosition"); 

GLES20.glVertexAttribPointer(maPositionHandle, 3, GLES20.GL_FLOAT, false, 
     TRIANGLE_VERTICES_DATA_STRIDE_BYTES, mTriangleVertices); 

तो aPosition एक vec4 है, लेकिन है कि यह निर्धारित करने के लिए प्रयोग किया जाता है glVertexAttribPointer करने के लिए कॉल 3. के size इस कोड सही है है, अनिर्दिष्ट व्यवहार पर निर्भर GLES20TriangleRenderer है, या फिर कुछ और है मुझे याद आ रही है?

उत्तर

10

शेडर को दिए गए विशेषता डेटा का आकार उस शेडर में विशेषता के आकार से मेल नहीं खाता है। आप vec4 के रूप में परिभाषित एक विशेषता के लिए 2 मान (glVertexAttribPointer से) पास कर सकते हैं; बचे हुए दो मान शून्य हैं, डब्ल्यू घटक को छोड़कर 1 है। और इसी तरह, आप 4 मानों को vec2 विशेषता में पास कर सकते हैं; अतिरिक्त मूल्यों को त्याग दिया जाता है।

तो आप अपलोड किए गए मूल्यों के साथ वर्टेक्स विशेषताओं को मिश्रित और मिलान कर सकते हैं।

+0

दिलचस्प। क्या यह व्यवहार कहीं दस्तावेज है? –

+0

@LaurenceGonsalves: यह ओपनजीएल ES विनिर्देश में प्रलेखित है। –

+6

मैं कुछ और विशिष्ट के लिए उम्मीद कर रहा था। :-) रिकॉर्ड के लिए, यह "एरे तत्वों को स्थानांतरित करने" शीर्षक के तहत "Vertex Arrays" spec के खंड 2.8 में प्रलेखित किया गया प्रतीत होता है। –

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

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