2

HLSL シェーダーに 2 つのテクスチャを渡す場合、SamplerState も 2 つ必要ですか? SamplerStates が実際にどのように機能するかについて、私は少し混乱しています。私はそれらをインスタンス化することは決してありません、私はただ呼び出します

Tex.Sample(sampler, pos);

プロファイル 9.3 用にシェーダーをコンパイルしています (違いがある場合は WP8)。

シェーダーの例:

Texture2D InputTexture;
SamplerState Sampler;

float4 PSMain(float2 pos: TEXCOORD, float4 SVP : SV_POSITION) : SV_TARGET {  
    float4 image = InputTexture.Sample(Sampler, pos);   
    return image;   
}

technique  {
    pass {
        Profile = 9.3;
        PixelShader = PSMain;
    }
}
4

1 に答える 1

3

あなたがやろうとしていることは、マルチテクスチャリングと呼ばれています。

SamplerStateオブジェクトにはサンプリング オプションとフィルタリング オプションが含まれており、サンプラーを使用すると、そのオプションを使用してテクスチャからデータを読み取ることができます

設定できるサンプラーの状態は多数あります。

Filter
AddressU
AddressV
AddressW
MipLODBias
MaxAnisotropy
ComparisonFunc
BorderColor
MinLOD
MaxLOD

Direct3D 10 の構文は次のとおりです。

//example
SamplerState mySampler{
    Filter = MIN_MAG_MIP_LINEAR; //sets min/mag/mip filter to linear
    AddressU = Wrap;
    AddressV = Wrap;
};

ここにデフォルト値があり、ここに状態のいくつかの意味があります。

SamplerState結局のところ、必要な の数は、達成したい効果の種類によって異なると言えます。しかし、本当に単純なコードは次のようになります。

Texture2D InputTextures[2];
SamplerState Sampler;

float4 PSMain(float2 pos: TEXCOORD, float4 SVP : SV_POSITION) : SV_TARGET {
    float4 color = InputTexture[0].Sample(Sampler, pos) * InputTexture[1].Sample(Sampler, pos);
    return color;  
}

実際、ご覧のとおり、テクスチャの 2 色を乗算して、マルチテクスチャ オブジェクトを取得するだけです。

于 2012-12-28T09:10:04.057 に答える