문제

내 엔진에서는 알파가 0인 텍셀이 있는 DXT1 텍스처를 감지할 수 있어야 합니다(예:창틀 컷아웃).내가 직접 압축한 텍스처에는 쉽지만 이미 압축된 텍스처에 대해서는 잘 모르겠습니다.

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

도움이 되었습니까?

해결책

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

다른 팁

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

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

DDS는 DXT(또는 BTC) 데이터에 대한 매우 열악한 래퍼입니다.헤더는 도움이 되지 않습니다.일반 원본 DXT1에는 알파가 없습니다.나는 요즘 d3d가 실제로 알파를 사용하여 DXT1을 디코딩한다고 믿습니다.모든 DXT1 블록은 다음과 같습니다:color1(16비트) color2(16비트) 인덱스(32비트).16비트 color1 값이 color2보다 작은 경우(단지 uint16 비교일 뿐, 별 것 아닙니다!) 블록에는 알파가 없습니다.그렇지 않으면 그렇습니다.따라서 귀하의 질문에 대답하려면 다음을 수행하십시오.헤더를 건너뛰고 16비트 a를 읽고 16비트 b를 읽습니다. a>b이면 알파가 있습니다.그렇지 않으면 32비트를 건너뛰고 eof까지 반복합니다.DXT5와 같은 다른 DXT 형식에는 항상 알파가 있습니다.일부 hw(intel..)가 DXT1 알파 트릭을 안정적으로 지원하지 않기 때문에 사람들이 DXT1 알파 트릭에 의존하는 경우는 매우 드뭅니다.

아니요, DDS 헤더는 압축되지 않은 이미지에만 알파 플래그를 사용합니다.DXT1 이미지가 1비트 알파를 사용하고 있는지 알아내려는 비슷한 필요성이 있었고 오랜 검색 끝에 여기에서 다음 참조를 발견했습니다. https://msdn.microsoft.com/en-us/library/windows/desktop/bb147243(v=vs.85).aspx

기본적으로 color_0 <= color_1이면 텍스처에 1비트 알파가 있을 가능성이 있습니다.이를 추가로 확인하려면 2비트 쌍의 다음 32비트가 11인지 확인해야 합니다.그런 다음 찾을 수 없는 경우 모든 블록에 대해 이 작업을 계속합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top