DirectX Ops (dxops.exe)
このコマンド ライン ツールを使用すると、スクリプト ファイルまたは一連のコマンド ライン引数 (あるいはその両方) を指定して .x ファイルまたはテクスチャーを変更することができます。各スクリプトは、一連のスクリプト コマンドから構成されます。指定するスクリプトでは、load コマンドと save コマンドをそれぞれ 1 つ以上指定する必要があります。
Compatibility Chart
Direct3D 9 | Direct3D 10 | 64 ビット ネイティブ モード | Windows?XP | Windows?Vista |
---|---|---|---|---|
あり |
不要 |
不要 |
あり |
あり |
Path
実行可能ファイル : | (SDK root)\Utilities\Bin\x86 または x64 |
構文
dxops [-f scriptfile] [-s "expression"] [-log filename] [-?][-m] |
---|
この場合
オプション | 説明 |
---|---|
-f scriptfile | 一連のスクリプト コマンドが含まれるスクリプト ファイル。 |
-s "script commands" | 一連のスクリプト コマンドが含まれる文字列。 |
-? | ヘルプ メッセージを表示します。 |
-log filename | ログ ファイルの名前と場所です。ログ ファイルが既に存在する場合は、上書きされます。 |
-m path | 検索パスを指定します。ファイルのロード時、DXOps は相対パスと、このコマンドで指定されたパス (複数可) も検索します。-m を複数回指定すると、パスを複数指定できます。 |
少なくとも -f または -s スイッチ オプションを指定する必要があります。-f と -s を同時に指定した場合は、指定された順序で実行されます。以下の例を参照してください。
例
ここでは、DXOps の使用例をいくつか示します。これらの例で使用されているスクリプト コマンドについては、「DirectX Ops スクリプト コマンド」を参照してください。
- 頂点データの生成
- ファイルに対するメッシュ データの出力
- .NET 正規表現の使用
- shade スクリプト コマンドの使用方法
頂点データの生成
tiger.x という名前のファイルが現在のディレクトリにあり、その頂点データ (法線、接線、および隣接性) の生成 (または更新) を実行するとします。次のようなコマンド ラインを使用すると、その処理を実行できます。
dxops.exe -s "load tiger.x;" -f "script1.txt" -s "save new_tiger.x"
-s "load tiger.x;" により、変更対象の tiger のメッシュがロードされます。
-f "script1.txt" により、メッシュの法線、接線フレーム、および隣接データを生成するスクリプトが実行されます。AddVData コマンドにより該当するフィールドが tiger のメッシュの頂点宣言 (法線、接線、および隣接性) に追加され、Gen* コマンドによりこれらのデータ フィールドに値が設定されます。
この場合、script1.txt は以下のとおりです。
AddVData type:FLOAT3 usage:NORMAL usageIdx:0;
GenNormals;
AddVData type:FLOAT3 usage:TANGENT usageIdx:0;
AddVData type:FLOAT3 usage:BINORMAL usageIdx:0;
GenTangentframes;
GenAdjacency;
-s "save new_tiger.x;" により、新しく変更された tiger のメッシュが new_tiger.x と呼ばれるファイルに保存されます。
ファイルに対するメッシュ データの出力
この例では、フォルダーからメッシュをロードし、それらのデータをログ ファイルに出力します。一連の .x ファイルは、C:\myGameData\ というフォルダーに保存されているものとします。コマンド ラインで次のように入力します。
dxops -m "C:\myGameData\" -log "modelData.txt" -s "load 'myModels\*.x'; meshes;"
load コマンドは、まず myModels\ (現在の作業ディレクトリに対する相対パス) 内で *.x ファイルを検索し、見つからないと C:\myGameData\ 内で .x ファイルを検索します。-m オプションにより、指定したファイルが見つからなかった場合に DXOps が検索する 2 番目のディレクトリを指定しています。-log オプションに従い、DXOps はデータを modelData.txt に書き出します。
.NET 正規表現の使用
DXOps のほとんどすべてのスクリプト コマンドには、 を使用して文字列を受け取ることができる name パラメーターがあります。この例では、名前が類似している多くのさまざまなファイルに対してそれらの正規表現を使用し、簡単なスクリプトを実行する方法を示します。
レーシング ゲームを開発中であり、一連の x ファイル (車ごとに 1 つ存在し、car_<name of car>.x という命名規則に従う) があるものとします。そして、各車の法線を生成するものとします。正規表現を使用すれば、以下のようなスクリプトを実行できます。
load car_1.x;
load car_2.x;
gennormals car_.*;
これにより、car_1 および car_2 の頂点法線が生成されます。ロードするファイルを指定するときに、必要に応じて DOS ワイルドカードを使用したり、gennormals で を使用することもできます。
shade スクリプト コマンドの使用方法
shade スクリプト コマンドは、テクスチャー処理用のパワフルなツールとして使用できます。このスクリプト コマンドは、上位レベル シェーダー言語 (HLSL) で定義されているアルゴリズムを実行するという点で、ピクセル シェーダーおよび頂点シェーダーに非常に類似しています。
ここで示す例では、shade スクリプト コマンドを使用してキューブ マップにカラー ブレンド エフェクトを追加する方法を示します。(SDK ルート)\Samples\Media\Lobby にある LobbyCube.dds テクスチャーを使用します。
コマンド ラインで次のように入力します。
dxops -f "shadeScript.txt"
shadeScript.txt は以下のとおりです。
load 'LobbyCube.dds';
shade 'texShader.psh';
save 'LobbyShaded.dds';
texShader.psh は以下のとおりです。
textureCUBE TargetTex;
samplerCUBE Target = sampler_state //note that naming the sampler 'Target' will cause
{ //the shade command to initialize the sampler with
Texture = (TargetTex); //the destination texture.
MinFilter = Linear;
MagFilter = Linear;
};
float4 main(float3 UVW : TEXCOORD0, float3 PixelSize : TEXCOORD1) : COLOR
{
float3 normUVW = (1.0f+UVW)*0.5;
float4 color = float4(0,0,0,1);
if(PixelSize.x == 0)
{
if(UVW.x > 0) //+
{
color.g = normUVW.y;//up
color.r = 1.0f-normUVW.z;//right
}
else //-
{
color.g = normUVW.y;//up
color.r = normUVW.z;//right
}
}
if(PixelSize.y == 0)
{
if(UVW.y > 0) //+
{
color.g = 1.0f-normUVW.z;//up
color.r = normUVW.x;//right
}
else //-
{
color.g = normUVW.z;//up
color.r = normUVW.x;//right
}
}
if(PixelSize.z == 0)
{
if(UVW.z > 0) //+
{
color.g = normUVW.y;//up
color.r = normUVW.x;//right
}
else //-
{
color.g = normUVW.y;//up
color.r = 1.0f-normUVW.x;//right
}
}
return texCUBE(Target, UVW) + color;
}
このシェーダーを実行した後、キューブ マップの正方向の x 面は次のようになります。
注 DDS キューブ マップ テクスチャーは、DirectX テクスチャー エディター (Dxtex.exe) を使用すると表示できます。