0

頂点シェーダーでは、次のようにすることを知っています。

PixelInputType TextureVertexShader(VertexInputType input)
{
        PixelInputType output;

// Change the position vector to be 4 units for proper matrix calculations.
        input.position.w = 1.0f;
// Update the position of the vertices based on the data for this particular instance.
        input.position.x += input.instancePosition.x;
        input.position.y += input.instancePosition.y;
        input.position.z += input.instancePosition.z;
// Calculate the position of the vertex against the world, view, and projection matrices.
        output.position = mul(input.position, worldMatrix);
        output.position = mul(output.position, viewMatrix);
        output.position = mul(output.position, projectionMatrix);

// Store the texture coordinates for the pixel shader.
output.tex = input.tex;

        return output;
}

ジオメトリ シェーダで instancedPosition を使用するのと同じことは何ですか?たとえば、1 つの頂点で構成されるモデルをインスタンス化し、各インスタンスに対してジオメトリ シェーダでクワッドを作成し、クワッドの位置を対応するインスタンスの位置に設定します。インスタンス バッファ内のインスタンス。

4

1 に答える 1

0

ジオメトリ シェーダーでデータを渡すには、VS から GS に単純に渡すことができるため、VS 出力構造は次のようになります。

struct GS_INPUT
{
    float4 vertexposition :POSITION;
    float4 instanceposition : TEXCOORD0; //Choose any semantic you like here
    float2 tex : TEXCOORD1;
    //Add in any other relevant data your geometry shader is gonna need
};

次に、頂点シェーダーで、データを直接ジオメトリ シェーダーに渡します (変換されていません)。

入力プリミティブ トポロジに依存した後、ジオメトリ シェーダーはポイント、ライン、または完全な三角形のいずれかとしてデータを受け取ります。

[maxvertexcount(4)]
void GS(point GS_INPUT input[1], inout TriangleStream<PixelInputType> SpriteStream)
{
    PixelInputType output;

    //Prepare your 4 vertices to make a quad, transform them and once they ready, use
    //SpriteStream.Append(output); to emit them, they are triangle strips,
    //So if you need a brand new triangle,
    // you can also use SpriteStream.RestartStrip();       
}
于 2012-09-11T10:27:02.733 に答える