キャストと変換

ホスト アプリケーションとエフェクト パラメーターの間で値を転送する場合、(ホスト アプリケーションの) ソース データ型が (効果パラメーター内の) 宛先データ型と一致すると、データが想定どおりに書き込まれます。 データ型が異なる場合、変換先に合わせてソース データが再配置されるときにキャストが発生します。

DXSAS は、次の型変換規則を定義します。 これらは効果 (.fx) と HLSL 型変換規則のスーパーセットです。 DXSAS では、ホスト アプリケーションからバインドされたパラメーターに転送される値に影響を与える可能性のあるパラメーター 値修飾子 も定義されています。

型キャスト

次の表に、あるデータ型が別のデータ型に転送されるときに発生するキャストを示します。

ソースの種類 変換先の型 動作
float INT 0 方向に丸めます。
float、int bool 0 と等しくない値 (0 (int) または 0.0 (float) との比較に基づく値は true と見なされます。それ以外の場合、値は false と見なされます。
INT float
[bool] int、float False は 0 に変換されます。True は 1 に変換されます。
texture1D、texture2D、texture3D、textureCUBE テクスチャ 変換先テクスチャは、ソース テクスチャ タイプとして扱われます。
string texture1D、texture2D、texture3D、textureCUBE 文字列値はリソース アドレスとして扱われ、 パラメーター初期化注釈と同じ方法で解決されます。 リソース アドレスを解決できない場合、キャストは無効であり、ホスト アプリケーションはエラーを返す必要があります。 リソースが正しく解決されると、式の型は解決されたリソースと同じ型として扱われます。

 

クラス キャスト

上記の型キャスト規則に加えて、DXSAS では、クラス型間の変換に必要なキャスト規則のセットを定義します。 列行列 (N x 1)、行行列 (1 x N)、および数値構造はベクトルとして扱われます。

効果行列パラメーターと HLSL マトリックス変数は、値が行メジャーマトリックスか列メジャー マトリックスかを定義できます。ただし、DirectX API は常に D3DMATRIXD3DXMATRIX を 行メジャーとして扱います。

Source クラス Destination クラス 動作
スカラー スカラー 型キャストを適用します。
スカラー ベクター 「型キャスト」で説明されている型キャストと変換動作を適用した後、ターゲット ベクターのすべてのコンポーネントにスカラー ソース値をレプリケートします。
スカラー Matrix 「型キャスト」で説明されている型キャストと変換動作を適用した後、ターゲット マトリックスのすべてのコンポーネントにスカラー ソース値をレプリケートします。
スカラー Object 無効なキャストです。 ホスト アプリケーションはエラーを返す必要があります。
スカラー 構造体 変換先の構造体に数値要素のみが含まれている場合にのみ有効です。 有効な場合は、「型キャスト」で説明されている型キャストと変換動作を適用した後、ターゲット構造体のすべてのコンポーネントにスカラー ソース値をレプリケートします。
ベクター スカラー 変換先スカラーは、「型キャスト」で説明されている型キャストと変換動作を適用した後、ソース ベクターの最初のコンポーネントの値 受け取ります。
ベクター ベクター 変換先ベクトルにソース ベクトルより多くのコンポーネントがある場合、キャストは無効です。 変換先ベクトルは、「型キャスト」で説明されている型キャストと変換動作を適用した後、ソース ベクターの左端の値 受け取ります。 ソース ベクターの残りの右端のコンポーネントは失われます。
ベクター Matrix 変換元ベクトルの成分数が変換先行列と同じでない限り、キャストは無効です。 キャストが有効な場合は、ベクター間キャストの動作が適用されます。
ベクター Object 無効なキャストです。 ホスト アプリケーションはエラーを返す必要があります。
ベクター 構造体 変換先の構造体に数値要素のみが含まれており、ソース ベクターにコンポーネントが含まれているよりも多くの要素が含まれていない場合にのみ有効です。 変換先構造体の要素は、「 型キャスト」で説明されている型キャストと変換動作を適用した後、ソース ベクターの左端のコンポーネントを受け取ります。
Matrix スカラー 変換先スカラーは、「 型キャスト」で説明されている型キャストと変換動作を適用した後、ソース マトリックスの左上の値の値を受け取ります。
Matrix ベクター ソース マトリックスに変換先ベクトルと同じ数のコンポーネントがない限り、無効なキャストです。 キャストが有効な場合は、上記のベクター間キャストの動作が適用されます。
Matrix Matrix 変換先マトリックスにソース マトリックスよりも多くのコンポーネントがある場合、キャストは無効です。 変換先マトリックスは、「 型キャスト」で説明されている型キャストと変換動作を適用した後、ソース マトリックスの左上の値を受け取ります。 ソース マトリックスの残りの右下のコンポーネントは失われます。
Matrix Object 無効なキャストです。 ホスト アプリケーションはエラーを返す必要があります。
Matrix 構造体 構造体のサイズは行列のサイズと等しく、構造体のすべての構成要素は数値である必要があります。
Object スカラー 無効なキャストです。 ホスト アプリケーションはエラーを返す必要があります。
Object ベクター 無効なキャストです。 ホスト アプリケーションはエラーを返す必要があります。
Object Matrix 無効なキャストです。 ホスト アプリケーションはエラーを返す必要があります。
Object Object オブジェクトの型が同じで、 型キャストで定義されている動作に従っている場合に有効です。
構造体 スカラー ソース構造に少なくとも 1 つの数値メンバーが含まれている場合に有効です。 変換先スカラーは、「 型キャスト」で説明されている型キャストと変換動作を適用した後、ソース構造体の最初の数値メンバーの値を受け取ります。
構造体 ベクター ソース構造は、少なくともベクターのサイズである必要があります。 最初のコンポーネントは、変換先ベクトルのサイズまでの数値である必要があります。
構造体 Matrix ソース構造は、少なくともベクターのサイズである必要があります。 最初のコンポーネントは、変換先ベクトルのサイズまでの数値である必要があります。
構造体 構造体 変換先の構造体は、ソース構造よりも大きくすることはできません。 有効なキャストは、それぞれのソース コンポーネントとターゲット コンポーネントの間に存在する必要があります。

 

パラメーター値修飾子

パラメーター修飾子注釈は、パラメーターのデータを正しく解釈できるように、パラメーターに追加情報を追加します。 たとえば、ベクターを正規化されたデータで表す必要がある場合や、長さをインチ単位で測定する必要がある場合があります。 パラメーター値修飾子注釈は、この追加情報を表します。これにより、データがエフェクト パラメーターに転送されるときに、ホスト アプリケーションが値を正しく変換できます。

パラメーター修飾子は次のとおりです。

パラメーター値修飾子の注釈 説明
SasNormalize ベクトルを正規化するかどうかを指定します。
SasUnits パラメーターの測定単位を指定します。

 

SasNormalize

SasNormalize 注釈は、関連付けられているパラメーターが割り当てられるたびに正規化された値である必要があることを示します。 この注釈は、float2、float3、および float4 パラメーターにのみ影響します。

string SasNormalize = "Value";

ここで、値は True または False です。

次に例を示します。

float3 UpNormal
<
  bool SasNormalize = "True";
>;

SasUnits

効果パラメーター のデータは、次の単位で表されます。

string SasUnits = "Value";

ここで、値は次のいずれかです。

測定タイプ 説明
単位なし 空の文字列 単位なし
距離 mm mm
cm センチメートル
m メートル
km キロメートル
Angle rad Radians
Time ms ミリ秒
時間 時間
線形速度 mm/sec ミリメートル/秒
cm/秒 センチメートル/秒
m/sec メートル/秒
m/hr メートル/時
km/hr キロメートル/時
線形加速度 mm/sec² ミリメートル/秒 2 乗
cm/sec² センチメートル/秒 2 乗
m/sec² 1 秒あたりの平方メートル数
m/hr² メートル/時 2 乗
km/hr² キロメートル/時 2 乗
Angular速度 rad/sec 1 秒あたりのラジアン数
Angular アクセラレーション rad/sec² 1 秒あたりのラジアン数 (2 乗)
領域 mm² ミリメートル 2 乗
cm² センチメートル (2 乗)
平方メートル
km² 平方キロメートル
ボリューム mm の ² ミリメートルキューブ
cm の ² センチメートルのキューブ
m ² キューブ化されたメーター
km ² キロメートルのキューブ化

 

DirectX 標準注釈とセマンティクスのリファレンス