2011-12-04 5 views
0

iOS에서 NPOT PVR 텍스처를 수동으로로드하고 싶습니다 (OpenGL 메모리에서 텍스처를로드하는 것은 아닙니다. 이미지 데이터에 액세스 할 수있는 맞춤 데이터 구조로로드하는 것을 의미합니다. 캔버스를 확대하고 새로운 PVR로 다시 저장하십시오).iOS에서 NPOT PVR 텍스처를 POT로 변환

배경 질감이 많은 OpenGL iOS 응용 프로그램 (비 망막 디스플레이에서는 480 x 320)을 구현하기 때문에이 질문을드립니다. 우리는이 텍스쳐를 NPOT PVR 파일로 저장하려고하므로 3GS + iPhones에서 메모리를 얻게됩니다.

3G-iPhone은 비 OpenGL 메모리에서 NPOT PVR 텍스처를로드 할 수 없습니다. 내 의도는 모든 NPOT PVR 텍스처를 POT PVR로 변환하고이를 앱의 캐시 폴더에 저장하는 3G 장치의 전처리 단계를 구현하는 것입니다.

이렇게 PVR을로드하고 처리 할 수 ​​있습니까? 예를 들어, TexturePacker가 PVR을 생성했습니다.

+0

정확성을 유지하기 위해 PVRTC 텍스처의 캔버스 크기를 조정하고 싶지 않다는 것을 깨달았습니다. 대신 우리는 일반적인 RGB444A 형식을 캡슐화하는 PVR 파일 (컨테이너)의 캔바스 크기를 조정하려고합니다. 어쨌든 대답을 주셔서 감사합니다. 그들은 많은 도움을주었습니다! –

답변

1

물론입니다.

  1. 파일 형식의 압축을 푸십시오.
  2. 스케일 RAW 이미지 데이터
  3. 압축 새로운 확장 데이터와 https://github.com/Volcore/quickpvr 또는 파워 VR의 SDK를 참조하십시오 단계 하나

저장합니다.

3 단계에는 공개적으로 사용 가능한 PVRTC 압축 문서 또는 구현이 없습니다. 그래서 몇 가지 옵션이 있습니다. 클래스 덤프와 otx의 조합을 사용하여 Apple 의 texturetool (권장하지 않음)을 디 컴파일하거나 1 단계에서 만들 수있는 파일 형식의 사양에 따라 고유 한 인코더를 작성하십시오.

그러나 귀하의 상황에서 나는이 모든 것을 전처리 된 단계로 수행하고 앱과 함께 두 가지 버전의 텍스쳐를 포함합니다.

+0

답변 해 주셔서 감사합니다!우리는 앱에 따라 두 가지 버전을 포함시키지 않기를 원합니다. 왜냐하면 그 중 * 톤 *이 있기 때문에 IPA 크기가 상당히 증가하기 때문입니다. 또한, PowerVR SDK를 사용하여 iOS에서 3 단계 파일을 생성하는 방법이 없습니까? TexturePacker와 같은 다른 도구가 PVR 압축 파일을 작성하는 방법은 무엇입니까? –

+0

그런데 정확성을 위해 2 단계는 "원본 이미지 데이터에 투명 픽셀 추가"입니다. –

+0

너는 무엇을, 나는 결코 전에 이것을주의하지 않았다, 그러나 이것은 너를 사용할지도 모른다 : http://www.imgtec.com/powervr/insider/powervr-pvrtexlib.asp. 나는 아직 빠져 나가지 못했지만, 정확히 당신이 찾고있는 것입니다. – bronxbomber92

1

자동으로 반복/감싸는 텍스처가 필요하지 않고 480 x 320 텍셀을 512x512 텍스처의 하위 집합으로 사용하고 X> 480 및 y> 320 인 부분에는 액세스하지 마십시오. 그러면 데이터를 재정렬 할 수 있습니다.

소스 이미지를 최대 512x512 (일정한 색상을 사용)까지 채우고 압축 한 다음 텍스처의 관련 부분을 저장하는 것이 좋습니다. 응용 프로그램에서 텍스처를로드 할 때 빠진 압축 된 데이터로 다시 채 웁니다. (그것은 가장 명확한 설명이 아니라는 것을 깨달았습니다 : - |).

저장 순서 (bronxbomber92에서 제공 한 링크에 설명되어 있음)를 고려해야하지만 더 간단한 접근 방법이있을 수 있다는 사실을 알고 있습니다. 압축 된 데이터는 64 비트 청크로 배열/인터리브됩니다. 소스 이미지를 일정한 색상으로 패딩 한 경우 압축 후 (적어도 IMG PVRTextool 압축기 이상) 64 비트 청크의 합리적인 비율 (~ 38 %)이 동일해야합니다. 예를 들어 64 비트 단어가이 '동일한'상수를 사용하여 해당 데이터를 저장하지 않도록 표시하는 플래그 세트를 사용할 수 있습니다.

+0

자세한 답변을 보내 주셔서 감사합니다. –

관련 문제