2010年5月14日金曜日

Xファイルを読み込む機能を追加 しようと計画

自作の3Dモデル表示ライブラリ(Java)に、とりあえずXファイルを読み込む機能を追加
しようと計画。


まず、DirectX SDK最新を取得し、インストール
それから参考にしたいVC++のプログラムがあったので、コンパイルしてみると

fatal error C1083: include ファイルを開けません。'dmusicc.h': No such file or directory

というメッセージがでた。


理由は、

dmusicc.hとdmusici.hはDirectMusic関連のヘッダファイルですが、DirectX SDK August 2007を最後に廃止されました。

ということらしい。


参考にしたい部分は、Xファイルをどのように使用しているかなので
サウンド部分は、必要ないので、とりあえずサウンド関連クラスはかたっぱしから削除し続けて実行できるようにしてみた。


実行できるようになったので、ソースとXファイルをしばし見てみる。


Xファイルを眺めていると、

     TextureFilename {
      "xxxx.dds";
     }

という部分があった。



このファイル形式は、


DxTex.exe

を使えば、見ることができることがわかったが、
とりあえずファイル形式をpngに変換したいと考え
DirectX SDKのフォルダを見てみると、それらしきものがあった。

その名は、Texconv.exe

検索してみると、MSDNのページがヒットした。
http://msdn.microsoft.com/ja-jp/library/bb206243%28VS.85%29.aspxの内容は、以下

テクスチャー変換ツール (Texconv.exe)

次のフォーマット間でテクスチャーを変換 するコマンド ライン ツールです。BMP、DDS、JPEG、HDR、PFM、または PNG。

互 換性チャート

Direct3D 9Direct3D 1064 ビット ネイティブ モードWindows?XPWindows?Vista

あ り

不要

あり

あり

あ り

Path

実行ファイル Texconv.exe は、以下のようにプラットフォームによって異なる場所にあります。

32 ビットDirectX SDK ルート\Utilities\Bin\x8664 ビットDirectX SDK ルート\Utilities\Bin\x64

構文

Texconv.exe では、次のコマンド構文を使用します。

texconv [-w number] [-h number] [-d number] [-m number] [-f format] [-if filter] [-mf filter] [-c color] [-srgbi] [-srgbo] [-px string] [-sx string] [-o directory] [-ft file-type] [-nologo] file-name

file-name パラメーターは、変換対象のファイルを指定します。

オプションのコマンドライン スイッチを、次の表に示します。

オ プション スイッチ説明
-c colorカ ラーキー値。このカラーは、ソース テクスチャー内にあると、出力テクスチャー内では透明な黒の値 (0x000000) に置き換えられます。出力テクスチャー内にアルファ チャンネルがあると、指定したカラーがこれにより、透明になります。アルファ チャンネルが存在しない場合は、黒に変更されます。このカラーを指定する場合は常に、アルファ値 (カラーが不透明の場合は FF を使用) を含めるようにします。たとえば、-c FFFE02A5 と指定すると、カラーキー値はソリッドのマゼンタになります。
-d number出 力テクスチャーの深度。この設定は、ボリューム テクスチャーにのみ適用されます。
-f format出 力形式。D3DFORMAT の任意のフォーマットをプレフィックス D3DFMT_ なしで指定します (例外:D3DFMT_MULTI2_ARGB8)。
-ft file-type出 力テクスチャーのファイル タイプ。次のいずれか 1 つを指定します。bmp, dds, jpg, hdr, pfm, png, or tga。デフォルト値は dds です。
-h number出 力テクスチャーの高さ (ピクセル単位)。
-w number出 力テクスチャーの幅 (ピクセル単位)。
-if filterイ メージ フィルター。次のいずれか 1 つを指定します。NONEPOINTLINEARTRIANGLEBOXNONE_DITHERPOINT_DITHERLINEAR_DITHERTRIANGLE_DITHER、 または BOX_DITHER。名前に DITHER が含まれるフィルターは、4×4 の順序つきディザー アルゴリズムも適用されることを示しています。これらのフィルターについては「D3DX_FILTER」 を参照してください。
-m number出力テクスチャーに 生成されるミップマップ レベルの数。この設定は DDS 出力にのみ適用されます。詳細については、「ミッ プマップによるテクスチャー フィルタリング (Direct3D 9)」を参照してください。
-mf filterD3DX_FILTER で規定されているミップマップ フィルター値。
-o directory出 力ディレクトリ。
-px string得られるテクスチャー の名前の前に付加されるテキスト文字列。

-srgbi または

-srgbo

-sRGBi は、入力データが sRGB (ガンマ 2.2) カラー フォーマットであることを示す場合に使用します。-sRGBo は、出力データが sRGB カラー フォーマットであることを示す場合に使用します。
-sx string得 られるテクスチャーの名前の後に付加されるテキスト文字列。
-nologo著 作権に関するメッセージを除外します。




どうやら使えそうだ。

>"C:\Program Files (x86)\Microsoft DirectX SDK (February 2010)\Utilities\bin\x64\Texconv.exe" xxx.dds -ft png


で実行してみたところ、pngファイルに変換できた。

0 件のコメント:

コメントを投稿