मैं बनावट में प्रस्तुत करने की कोशिश कर रहा हूं, फिर आईफोन पर ओपनजीएल ईएस का उपयोग करके उस बनावट को स्क्रीन पर खींचें। मैं शुरुआती बिंदु के रूप में this question का उपयोग कर रहा हूं, और ऐप्पल के डेमो EAGLView के उप-वर्ग में ड्राइंग कर रहा हूं।ओपनजीएल ईएस बनावट को प्रस्तुत करता है, फिर बनावट
उदाहरण चर:
GLuint textureFrameBuffer;
Texture2D * texture;
फ्रेम बफर और बनावट को प्रारंभ करने के लिए, मैं यह कर रहा हूँ:
GLint oldFBO;
glGetIntegerv(GL_FRAMEBUFFER_BINDING_OES, &oldFBO);
// initWithData results in a white image on the device (works fine in the simulator)
texture = [[Texture2D alloc] initWithImage:[UIImage imageNamed:@"blank320.png"]];
// create framebuffer
glGenFramebuffersOES(1, &textureFrameBuffer);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, textureFrameBuffer);
// attach renderbuffer
glFramebufferTexture2DOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_TEXTURE_2D, texture.name, 0);
if(glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES)
NSLog(@"incomplete");
glBindFramebufferOES(GL_FRAMEBUFFER_OES, oldFBO);
अब, अगर मैं बस हमेशा की तरह स्क्रीन करने के लिए अपने दृश्य आकर्षित, यह ठीक काम करता है:,
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// draw some triangles, complete with vertex normals
[contentDelegate draw];
[self swapBuffers];
लेकिन अगर मैं, 'textureFrameBuffer' के लिए प्रस्तुत करना फिर 'बनावट' स्क्रीन करने के लिए आकर्षित है, जिसके परिणामस्वरूप im उम्र उल्टा है और "अंदरूनी" है। ऐसा लगता है, ऐसा लगता है कि 3 डी ऑब्जेक्ट्स के मानक बाहरी के बजाए अंदर की ओर इशारा करते हैं - प्रत्येक ऑब्जेक्ट का सबसे बड़ा चेहरा पारदर्शी है, और मैं पीछे के चेहरे के अंदर देख सकता हूं। कोड यह रहा:
GLint oldFBO;
glGetIntegerv(GL_FRAMEBUFFER_BINDING_OES, &oldFBO);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, textureFrameBuffer);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// draw some polygons
[contentDelegate draw];
glBindFramebufferOES(GL_FRAMEBUFFER_OES, oldFBO);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnable(GL_TEXTURE_2D);
glColor4f(1, 1, 1, 1);
[texture drawInRect:CGRectMake(0, 0, 320, 480)];
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisable(GL_TEXTURE_2D);
[self swapBuffers];
मैं (glTexCoordPointer) का क्रम बदल कर आसानी से पर्याप्त छवि rightside-अप फ्लिप कर सकते हैं तदनुसार निर्देशांक (Texture2D के drawInRect विधि में), लेकिन यह "अंदर से बाहर" इस मुद्दे को हल नहीं करता है।
मैंने मैन्युअल रूप से बनाए गए ओपनजीएल बनावट के साथ Texture2D बनावट को बदलने की कोशिश की, और परिणाम वही था। एक पीएनजी छवि से लोड एक Texture2D ड्राइंग ठीक काम करता है।
वस्तुओं को चित्रित करने के लिए, प्रत्येक वर्टेक्स में एक इकाई सामान्य निर्दिष्ट होती है, और GL_NORMALIZE
सक्षम है।
glVertexPointer(3, GL_FLOAT, 0, myVerts);
glNormalPointer(GL_FLOAT, 0, myNormals);
glDrawArrays(GL_TRIANGLES, 0, numVerts);
सबकुछ स्क्रीन पर प्रस्तुत होने पर ठीक हो जाता है; GL_DEPTH_TEST
सक्षम है और बहुत अच्छा काम कर रहा है।
इसे ठीक करने के तरीके के बारे में कोई सुझाव? धन्यवाद!
"अंदरूनी" समस्या के लिए: यदि आपके सामने वाले प्राइमेटिव्स को खींचा जाता है, तो आपको वर्टेक्स ऑर्डरिंग के साथ कोई समस्या है, जिसका उपयोग सामान्य सामान्य रूप से निर्धारित करने के लिए किया जाता है। यह texturing के साथ कोई मुद्दा नहीं है, जब तक कि मैं कुछ गलत समझ रहा हूँ। क्या आपके पास GL_CULL_FACE सक्षम है? – prideout
GL_CULL_FACE सक्षम नहीं था। इसे सक्षम करने से निश्चित रूप से समग्र उपस्थिति में सुधार होता है। ऑब्जेक्ट मानदंड अब सही तरीके से प्रतीत होते हैं, लेकिन बहुत से सामने वाले चेहरों को छुपाया जाना चाहिए, इस पर ध्यान दिए बिना कि वे किसी अन्य चेहरे से अस्पष्ट हैं (या बल्कि, होना चाहिए)। क्या यह मेरे त्रिकोणों की घुमाव के साथ कोई समस्या इंगित करता है? मैं ब्लेंडर से शिखर निर्यात करने के लिए एक स्क्रिप्ट का उपयोग कर रहा हूँ; मैं यह सुनिश्चित कर दूंगा कि निर्यात होने पर घुमाव एक समान है। ध्यान दें कि जब मैं सीधे स्क्रीन पर आकर्षित करता हूं तो सब ठीक दिखता है (और GL_CULL_FACE चालू या बंद होने पर कोई फर्क नहीं पड़ता)। –