有沒有落實使用OpenGL ES 2.0的的iOS 4抗鋸齒一個比較簡單的方法是什麼?OpenGL ES 2.0線比核心動畫顯得更加鋸齒。 iOS 4中可以使用抗鋸齒功能嗎?
要是地方,我需要放棄贊成的OpenGL ES的核心動畫 2.0得到真正3D圖形的情況。
東西的工作,但我注意到,簡單3D立方體使用核心動畫渲染比那些的OpenGL其中有更多的鋸齒線生產多保鮮盒。
,我讀了的iOS 4.0支持反鋸齒爲GL_TRIANGLE_STRIP,我發現了一個online tutorial(見下文從鏈接的代碼),看起來很有希望,但我一直沒能得到它加工。
我注意到的第一件事是所有這一切似乎是的Open GL ES 1.0殘餘的OES後綴。
因爲我所做的一切是的OpenGL ES 2.0,我試着刪除每個OES只是爲了看看發生了什麼。沒有錯誤或警告編譯和構建的東西,但我的圖形不再渲染。
如果我把OES後綴我得到以下類型的多個錯誤和警告:
Error - Use of undeclared identifier ''
Warning - Implicit declaration of function '' is invalid in C99
包括ES1頭文件產生了一個乾淨的構建,但仍然沒有得到呈現。似乎並不喜歡我需要包括ES 1.0頭文件反正實現此功能。
所以我的問題是我怎麼得到這個工作,它實際上解決我的問題?
是否在網上教程中,我鏈接的方法有正確的想法,我只是搞砸的實施,或是否有更好的方法?
任何指導或細節將不勝感激。
從鏈接以上代碼:
GLint backingWidth, backingHeight;
//Buffer definitions for the view.
GLuint viewRenderbuffer, viewFramebuffer;
//Buffer definitions for the MSAA
GLuint msaaFramebuffer, msaaRenderBuffer, msaaDepthBuffer;
//Create our viewFrame and render Buffers.
glGenFramebuffersOES(1, &viewFramebuffer);
glGenRenderbuffersOES(1, &viewRenderbuffer);
//Bind the buffers.
glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:(CAEAGLLayer*)self.layer];
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, viewRenderbuffer);
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth);
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight);
//Generate our MSAA Frame and Render buffers
glGenFramebuffersOES(1, &msaaFramebuffer);
glGenRenderbuffersOES(1, &msaaRenderBuffer);
//Bind our MSAA buffers
glBindFramebufferOES(GL_FRAMEBUFFER_OES, msaaFramebuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, msaaRenderBuffer);
// Generate the msaaDepthBuffer.
// 4 will be the number of pixels that the MSAA buffer will use in order to make one pixel on the render buffer.
glRenderbufferStorageMultisampleAPPLE(GL_RENDERBUFFER_OES, 4, GL_RGB5_A1_OES, backingWidth, backingHeight);
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, msaaRenderBuffer);
glGenRenderbuffersOES(1, &msaaDepthBuffer);
//Bind the msaa depth buffer.
glBindRenderbufferOES(GL_RENDERBUFFER_OES, msaaDepthBuffer);
glRenderbufferStorageMultisampleAPPLE(GL_RENDERBUFFER_OES, 4, GL_DEPTH_COMPONENT16_OES, backingWidth , backingHeight);
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, msaaDepthBuffer);
- (void) draw
{
[EAGLContext setCurrentContext:context];
//
// Do your drawing here
//
// Apple (and the khronos group) encourages you to discard depth
// render buffer contents whenever is possible
GLenum attachments[] = {GL_DEPTH_ATTACHMENT_OES};
glDiscardFramebufferEXT(GL_READ_FRAMEBUFFER_APPLE, 1, attachments);
//Bind both MSAA and View FrameBuffers.
glBindFramebufferOES(GL_READ_FRAMEBUFFER_APPLE, msaaFramebuffer);
glBindFramebufferOES(GL_DRAW_FRAMEBUFFER_APPLE, viewFramebuffer);
// Call a resolve to combine both buffers
glResolveMultisampleFramebufferAPPLE();
// Present final image to screen
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
}
如果您正在使用的OpenGL ES 2。0和GLKViewController這是'GLKView * view =(GLKView *)self.view; view.drawableMultisample = GLKViewDrawableMultisample4X; ' –