Quartz를 사용하여 그린 선은 일반적으로 앤티 앨리어스 처리되지만, 기본적으로 OpenGL ES에서는 사실이 아닙니다. iOS 4.0부터, Apple은 OpenGL ES 구현에 멀티 샘플 앤티 엘리 어싱 (MSAA)을 추가 했으므로 라인을 부드럽게하고 장면의 다른 가장자리를 활성화 할 수 있어야합니다.
Apple은 iOS 용 OpenGL ES 프로그래밍 가이드 "Using Multisampling to Improve Image Quality"섹션에서이를 설정하는 방법을 설명합니다. 당신은 변경해야 할 수 있도록이 코드가,는 OpenGL ES 2.0 응용 프로그램에서 그려지는 것을
glGenFramebuffers(1, &msaaFramebuffer);
glGenRenderbuffers(1, &msaaRenderbuffer);
glBindFramebuffer(GL_FRAMEBUFFER, msaaFramebuffer);
glBindRenderbuffer(GL_RENDERBUFFER, msaaRenderbuffer);
glRenderbufferStorageMultisampleAPPLE(GL_RENDERBUFFER, 4, GL_RGBA8_OES, backingWidth, backingHeight);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, msaaRenderbuffer);
glGenRenderbuffers(1, &msaaDepthbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, msaaDepthbuffer);
glRenderbufferStorageMultisampleAPPLE(GL_RENDERBUFFER, 4, GL_DEPTH_COMPONENT16, backingWidth, backingHeight);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, msaaDepthbuffer);
참고 : 다음과 같은 코드를 사용하여 멀티 샘플링 프레임 버퍼, 버퍼 렌더링, 및 깊이 버퍼를 (필요한 경우)을 설정 1.1에 대한 적절한 OES
접미사를 추가하십시오. 당신이 당신의 프레임을 제시 이동하면
, 당신은 뭔가를 할 것이다 다음
glBindFramebuffer(GL_READ_FRAMEBUFFER_APPLE, msaaFramebuffer);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER_APPLE, viewFramebuffer);
glResolveMultisampleFramebufferAPPLE();
glBindRenderbuffer(GL_RENDERBUFFER, viewRenderbuffer);
success = [context presentRenderbuffer:GL_RENDERBUFFER];
glBindFramebuffer(GL_FRAMEBUFFER, msaaFramebuffer);
당신은 색상과 깊이 버퍼를 폐기 할 수 있습니다 직전 또는 오른쪽으로 화면에 콘텐츠를 제시 한 후 최적화가있는 다음과 같은 코드를 사용할 수 있습니다
const GLenum discards[] = {GL_COLOR_ATTACHMENT0,GL_DEPTH_ATTACHMENT};
glDiscardFramebufferEXT(GL_READ_FRAMEBUFFER_APPLE,2,discards);
나는이 MSAA는 OpenGL을 ES 2.0 응용 프로그램 here에서 작업 표시하는 클래스의 예를 만들었습니다. ES2Renderer 클래스를 살펴보고 MSAA
정의를 활성화하여이 동작을 확인하십시오. 다시 말하지만 OpenGL ES 1.1 응용 프로그램 내에서이 코드를 배치하는 것이 매우 간단합니다. 몇 가지 함수 및 상수 접미어를 변경해야하기 때문입니다. 섹션
감사 – Simon
멀티 샘플 앤티 앨리어싱을 사용하면 더 두꺼운 선을 그리면 조금 더 좋아 보이게됩니다. 브래드에게 진로를 줘서 고마워. – Simon