3

アルファチャンネルのテクスチャにいくつかの値をマッピングしました。実際、私は自分のテクスチャを2Darrayとして使用しています。私が必要としているのは、たとえば[4] [5](xとyを表す)の位置にあるマップのアルファ値を読み取る方法です。

ピクセルシェーダーで利用可能な戻り値が必要です。これを行う方法はありますか?

DX9を使用しています。

事前にThx!

4

2 に答える 2

1

ピクセルシェーダー全体に[4][5](x、y)のテクセルを使用しますか?それがあなたの質問である場合は、頂点シェーダーでその座標を事前に計算し、すべての頂点にパスしてから、そのuvコードでサンプリングすることができます。このように、それは補間されません。(またはそうなりますが、補間する値は1つだけになります)

それ以外は、おそらく達成しようとしていることについてもっと具体的に説明する必要があります。何に使ってるの?いつ発生しますか、どのようなメッシュに使用していますか?

于 2012-10-22T07:25:31.370 に答える
0

Texture2DArrayは、シェーダーモデル4のものです。あなたがdx9でそれを使用しているとは思わない。

シェーダーモデル4を使用している場合は、関数Load(4、5)を使用します。

それ以外の場合、sm1、2、3の場合、通常のtexcoordデータとして、必要な数値(4.0fや5.0など)を頂点に配置できます。次に、ピクセルシェーダーにテクスチャのサイズでスケーリングさせます。

struct VertexInput {
    float4 pos : POSITION;
    float2 uv : TEXCOORD0; //0.0, 1.0, 2.0, 3.0, 4.0 etc
};

struct PixelInput {
    float4  position : POSITION;
    float2  uv : TEXCOORD0;
};

PixelInput vsTex(VertexInput vtx) 
{
    PixelInput output;
    float4 pos = vtx.pos;
    output.position = mul(pos, MatWorld);
    output.position = mul(output.position, MatView);
    output.position = mul(output.position, MatProj);

    output.uv = vtx.uv;

    return output;
}

float4 PixelShader(PixelInput input) : SV_Target
{
    float coords = pix.uv / float2(TEX_WIDTH, TEX_HEIGHT);
    return tex = tex2D(mySampler, coords);
}

TEX_WIDTH、TEX_HEIGHTは、D3DXCompileShaderの「defines」パラメーターを介して渡されます。と

または:ソフトウェアで4.0f/tex_widthと5.0/tex_heightを実行し、その数値([0.0f、1.0f]の間にあるピクセルシェーダーに渡す)を渡すだけです。

于 2012-10-23T12:27:52.357 に答える