1

私のエンジンでは、アルファが 0 のテクセルを持つ DXT1 テクスチャを検出できるようにする必要があります (ウィンドウ フレームのカットアウトなど)。これは、自分で圧縮したテクスチャでは簡単ですが、既に圧縮されているテクスチャについてはわかりません。

DDS イメージにアルファが含まれているかどうかをヘッダーから簡単に判断する方法はありますか?

4

4 に答える 4

2

私の知る限り、ヘッダーから判断する方法はありません。DDPF_ALPHAPIXELS フラグがありますが、ピクセル データの内容に基づいて設定されるとは思いません。DXT1 ブロックを解析し、アルファが 0 の色を探す必要があります (色が実際にブロックでも使用されていることを確認してください)。

于 2008-08-21T08:46:47.303 に答える
1

いいえ、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 の場合にチェックする必要があります。見つからない場合は、ブロックごとにこれを続けます。

于 2017-01-31T13:04:57.457 に答える
0

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 アルファ トリックに依存することは非常にまれです。

于 2012-05-22T08:30:08.343 に答える
0

受け入れられた答えに同意します。「squish」ライブラリを使用してブロックを解凍すると、作業が少し簡単になる場合があります。

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

于 2008-08-25T20:13:55.887 に答える