私のエンジンでは、アルファが 0 のテクセルを持つ DXT1 テクスチャを検出できるようにする必要があります (ウィンドウ フレームのカットアウトなど)。これは、自分で圧縮したテクスチャでは簡単ですが、既に圧縮されているテクスチャについてはわかりません。
DDS イメージにアルファが含まれているかどうかをヘッダーから簡単に判断する方法はありますか?
私のエンジンでは、アルファが 0 のテクセルを持つ DXT1 テクスチャを検出できるようにする必要があります (ウィンドウ フレームのカットアウトなど)。これは、自分で圧縮したテクスチャでは簡単ですが、既に圧縮されているテクスチャについてはわかりません。
DDS イメージにアルファが含まれているかどうかをヘッダーから簡単に判断する方法はありますか?
私の知る限り、ヘッダーから判断する方法はありません。DDPF_ALPHAPIXELS フラグがありますが、ピクセル データの内容に基づいて設定されるとは思いません。DXT1 ブロックを解析し、アルファが 0 の色を探す必要があります (色が実際にブロックでも使用されていることを確認してください)。
いいえ、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 の場合にチェックする必要があります。見つからない場合は、ブロックごとにこれを続けます。
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 形式には常にアルファがあります。一部のハードウェア (インテル..) が確実にサポートしていないため、人々が DXT1 アルファ トリックに依存することは非常にまれです。
受け入れられた答えに同意します。「squish」ライブラリを使用してブロックを解凍すると、作業が少し簡単になる場合があります。