2012-04-24 5 views
0

Apple의 RosyWriter 샘플 애플리케이션과 마찬가지로 텍스처 캐시를 사용하여 화면에 비디오 프레임을 그립니다.iOS 5.0에서 밉맵 필터링 사용하기 OpenGL ES 2.0 텍스처 캐시

이미지를 1080p에서 320x480으로 다운 샘플링하고 싶습니다. (여러 가지 이유로 낮은 해상도로 캡처하고 싶지는 않습니다.) 밉맵 필터링을 사용하여 앨리어싱을 제거하십시오. 그러나 다음을 추가하려고 시도합니다.

glGenerateMipmap(CVOpenGLESTextureGetTarget(inputTexture)); 
glTexParameteri(CVOpenGLESTextureGetTarget(inputTexture), GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); 

밉맵이 생성되지 않은 것처럼 화면이 표시됩니다. 한 텍스처에서 다른 텍스처로 화면을 비 춥니 다. 원본과 대상 모두 텍스처 캐시를 사용하여 픽셀 버퍼에 매핑됩니다.

답변

2

밉맵은 2의 거듭 제곱 크기 텍스처에만 생성 할 수 있습니다. 내가 생각할 수있는 iOS 카메라에 의해 반환 된 비디오 프레임 크기 중 어느 것도 2의 2의 멱수를 갖지 않습니다. 여전히 밉맵을 생성하는 동안 텍스처 캐시를 사용하려면 텍스쳐가 뒷받침되는 2 개의 제곱의 FBO에 대해 텍스처의 오프 스크린 재 렌더링을 수행 한 다음 그 밉맵을 생성해야합니다.

그렇긴해도, 이것은 아마도 당신이 원하는 것을 성취하기위한 최선의 방법은 아닙니다. 밉맵은 화면에서 텍스처를 작게 만들 때만 유용합니다. 또한 런타임시 생성 속도가 매우 느리기 때문에 전체 비디오 처리가 중단됩니다.

확대 할 때 어떤 종류의 앨리어싱이 표시됩니까? 일반 하드웨어 텍스처 필터링은 비디오 프레임을 확대 할 때 비교적 부드러운 이미지를 생성해야합니다. 예를 들어, 내 GPUImage 프레임 워크에서 FilterShowcase 샘플을 가져 와서 실행하고 자르기 필터를 살펴보십시오. 그런 식으로 비디오의 한 부분을 확대하면 하드웨어 필터링을 사용하여 멋지게 부드럽게 처리하는 것처럼 보입니다.

프레임 워크에서 큰 이미지를 부드럽게 다운 샘플링하기 위해 밉맵을 사용합니다 (smoothlyScaleOutput이 YES로 설정된 경우 GPUImagePicture 참조).하지만 다시 확대하면 이미지가 축소되지 않습니다.

+0

안녕하세요, Brad, 사과드립니다. 질문이 혼란 스러웠습니다. 나는 그것을 이해하기 위해 편집했습니다. 내가 확대 기능을 추가하고 있지만 이것은 요점과는 별도입니다. 이 문제는 실제로 축소되어 이미지가 다운 샘플링되어 더 쉽게 스트리밍 될 때 발생합니다. 지역을 확대 할 수 있다는 것은 단지 원래 캡처 해상도를 낮출 수없고 소프트웨어에서 수동으로 다운 샘플링해야한다는 의미이기 때문에 관련성이 있습니다. – chris838

+0

단순히 셰이더의 이미지를 로우 패스 필터링하면 앨리어싱을 제거하기에 충분합니까? 나는 이미 프레임 버퍼를 쓰고 쓰기위한 보일러 플레이트 코드를 가지고있다. – chris838

+1

@ chris838 - 다른 것을 찾고있는 중에, 나는 오늘 이것을 보았다 : http://mobile3dgraphics.blogspot.com/2011/04/mipmapping- and-npot-textures-inside.html에서는 NPOT 텍스처에 대해 삼선 형 필터링을 구현하는 방법을 설명합니다. 그것은 당신의 경우보다 부드러운 다운 샘플링을 달성하는 데 도움이 될 수 있습니다. –