DDS 파일에서 0/1 알파 비트로 텍스처를 감지 할 수 있습니까?


1

내 엔진에서는 0 알파 (예 : 창 프레임의 컷 아웃)로 텍셀이있는 DXT1 텍스처를 감지 할 수 있어야합니다. 이것은 내가 압축하는 텍스처에 대해 쉽지만 이미 압축 된 텍스처에 대해서는 확신하지 못합니다.

헤더에서 DDS 이미지에 알파가 포함되어 있는지 쉽게 알 수 있습니까?

2

내가 아는 한, 헤더에서 알 수있는 방법이 없습니다. DDPF_ALPHAPIXELS 플래그가 있지만 픽셀 데이터의 내용을 기반으로 설정되지는 않습니다. DXT1 블록을 구문 분석하고 알파가 0 인 색상을 찾아야합니다 (색상이 실제로 블록에서 사용되는지 확인해야합니다).


0

나는 받아 들인 대답에 동의합니다. "squish"라이브러리를 사용하여 블록을 압축 해제하면 작업이 조금 더 쉬워 질 수 있습니다.

http://www.sjbrown.co.uk/?code=squish


0

DDS는 DXT (또는 BTC) 데이터는 매우 빈약 래퍼이다. 헤더가 도움이되지 않습니다. 일반 원본 DXT1에는 알파가 없습니다. 나는 요즘 d3d가 실제로 DXT1을 알파로 디코딩한다고 생각합니다. 모든 DXT1 블록은 color1 (16 비트) color2 (16 비트) 인덱스 (32 비트)와 같이 보입니다. 16 비트 color1 값이 color2보다 작은 경우 (단지 uint16 비교, 아무 것도없는!) 블록에 알파가 없습니다. 그렇지 않으면 그렇습니다. 그래서 당신 질문에 답하기 위해서 : 헤더가 생략되면 16 비트를 읽고, 16 비트를 읽습니다. b> a가 있으면 알파가 있습니다. 그렇지 않으면 32 비트를 건너 뛰고 eof가 될 때까지 반복하십시오. DXT5와 같은 다른 DXT 형식에는 항상 알파가 있습니다. 사람들이 DXT1 알파 트릭을 사용하는 것은 드문 일입니다. 왜냐하면 일부 hw (Intel ..)가이를 안정적으로 지원하지 않기 때문입니다.


0

아니요, DDS 헤더는 압축되지 않은 이미지에 대해서만 알파 플래그를 사용합니다. DXT1 이미지는 1 비트 알파를 사용하는 경우 나는 알아낼 비슷한 필요성을 가지고 긴 검색 후 여기이 참조 건너 온 : https://msdn.microsoft.com/en-us/library/windows/desktop/bb147243(v=vs.85).aspx color_0 < = color_1 다음 텍스처 1이 가능성이 기본적으로 경우

- 비트 알파. 추가로 확인하려면 2 비트 쌍이 다음 11 비트 인 경우 다음 32 비트를 검사해야합니다. 발견되지 않으면 모든 블록에 대해이 작업을 계속하십시오.