1

HLSL頂点シェーダーから頂点宣言を読み取るにはどうすればよいですか?私はこの情報を意味します:

struct VS_INPUT
{
    float4 position : POSITION; 
    float2 uv       : TEXCOORD;
    float4 color    : COLOR;
};

IDirect3DDevice9 :: GetVertexDeclaration()などを試しましたが、動作しませんでした。この情報が必要なのは、描画呼び出しの前に、シェーダーがレンダリングしようとしているメッシュを処理していることを知るためです。

4

1 に答える 1

1

メソッド SetVertexDeclaration または SetFVF を使用して、次の DrawCall で使用される Vertexbuffer のフォーマットを記述します。ほとんどの場合は FVF で十分ですが、たとえば法線マッピングを使用している場合は、頂点宣言を介してのみ記述できる接線と従法線が必要です。

シェーダーには、頂点宣言などはありません。構造体は、頂点シェーダーの入力が期待されるものだけを記述します。したがって、頂点データとシェーダー入力の間には、タグ POSITION、TEXCOORD0、COLOR0 などのマッピングがあります。頂点データの何かをタグ「Position」でマークすると、マッパーはこのデータを POSITION でマークされたシェーダー構造体の変数に入力します。 . タグの頂点バッファに情報がない場合、値フィールドはあいまいです。存在するがshaderstructにタグがないすべてのデータは省略されます。

正しい方法は、次の描画呼び出しのためにどの頂点データを持っているかを調べて、指定された入力を期待する適切なシェーダーを選択することです。

于 2012-06-02T10:39:43.070 に答える