문제

일반적으로 다음과 같은 것을 사용합니다.

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glEnable(GL_LINE_SMOOTH);

glLineWidth(2.0f);

glVertexPointer(2, GL_FLOAT, 0, points);
glEnableClientState(GL_VERTEX_ARRAY);

glDrawArrays(GL_LINE_STRIP, 0, num_points);

glDisableClientState(GL_VERTEX_ARRAY);

iPhone 시뮬레이터에서는 좋아 보이지만 iPhone에서는 라인이 극도로 얇아지고 모든 aliasing이 없습니다.

iPhone에서 AA를 어떻게 얻습니까?

도움이 되었습니까?

해결책

불투명도 0이있는 정점을 사용하여 매우 저렴하게 항공 앨리어싱의 효과를 달성 할 수 있습니다. 설명 할 이미지 예는 다음과 같습니다.

alt text

AA와의 비교 :

alt text

여기에서 이것에 대한 논문을 읽을 수 있습니다.

http://research.microsoft.com/en-us/um/people/hoppe/overdraw.pdf

이런 식으로 무언가를 할 수 있습니다.

// Colors is a pointer to unsigned bytes (4 per color).
// Should alternate in opacity.
glColorPointer(4, GL_UNSIGNED_BYTE, 0, colors);
glEnableClientState(GL_COLOR_ARRAY);

// points is a pointer to floats (2 per vertex)
glVertexPointer(2, GL_FLOAT, 0, points);
glEnableClientState(GL_VERTEX_ARRAY);

glDrawArrays(GL_TRIANGLE_STRIP, 0, points_count);

glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);

다른 팁

시작 iOS 버전 4.0 쉬운 솔루션이 있습니다. 이제 몇 줄의 추가 코드만으로 전체 OpenGl es 장면에 항리아식을 사용할 수 있습니다. (최소한 SGX GPU에서는 성능 손실이 거의 없습니다).

코드는 다음과 같은 사과를 읽으십시오 Dev-Forum 스레드. 내 블로그에서 어떻게 보이는지 샘플 사진도 있습니다.

사용 http://answers.oreilly.com/topic/1669-how-to-render-anti-aliased-lines-with-textures-in-ios-4/ 출발점으로, 나는 이와 같은 반 알리 아스 라인을 얻을 수있었습니다.alt text

그들은 완벽하지도 않으며 코어 그래픽으로 그림을 그린 것만 큼 좋지는 않지만 꽤 좋습니다. 나는 실제로 같은 선 (정점)을 두 번, 더 큰 질감과 색상으로 한 번 더 작은 질감과 반투명 한 흰색으로 그려집니다.

선이 너무 단단히 겹치고 알파가 축적되기 시작하면 아티팩트가 있습니다.

이 제한 주위의 한 가지 방법은 라인을 질감의 삼각형 스트립으로 테셀링하는 것입니다 (본 것처럼 여기).

문제는 iPhone OpenGL에서 메인 프레임 버퍼가 아닌 프레임 버퍼 객체로 렌더링하고 이해하기 때문에 FBO는 멀티 샘플링을 지원하지 않는다는 것입니다.

디스플레이 크기의 두 배로 다른 FBO로 렌더링 한 다음 텍스처 필터링에 의존하여 물건을 부드럽게하는 것과 같은 다양한 트릭이 있습니다.

나는 이것을 시도했으며 iPhone에서 OpenGL을 사용하여 이것을하는 간단한 방법이 없다는 것을 매우 구체적으로 기억합니다. cgpaths와 cgcontextref를 사용하여 그릴 수 있지만 상당히 느려집니다.

이것을 렌더 메소드와 SetupFrame 버퍼에 넣으십시오 ... aliased 모양이 나타납니다.

/*added*/
//[_context presentRenderbuffer:GL_RENDERBUFFER];

//Bind both MSAA and View FrameBuffers.
glBindFramebuffer(GL_READ_FRAMEBUFFER_APPLE, msaaFramebuffer); 
glBindFramebuffer(GL_DRAW_FRAMEBUFFER_APPLE, framebuffer );  
// Call a resolve to combine both buffers 
glResolveMultisampleFramebufferAPPLE();   
// Present final image to screen 
glBindRenderbuffer(GL_RENDERBUFFER, _colorRenderBuffer);
[_context presentRenderbuffer:GL_RENDERBUFFER];
/*added*/
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top