3

我已经将一些值映射到我的 alpha 通道上的纹理中。实际上我使用我的纹理作为 2Darray。我需要的是一种读取地图位置的alpha值的方法,例如[4] [5](代表x和y)

我需要像素着色器中可用的返回值。有没有办法做到这一点?

我用的是DX9。

提前谢谢!

4

2 回答 2

1

您想为整个像素着色器使用 [4][5] (x,y) 处的纹素吗?如果这是您的问题,您可以预先计算顶点着色器上的坐标并将其传递给每个顶点,然后使用该 uv 线进行采样。这样它就不会被插值。(或者它会,但它只有一个值可以插值)

除此之外,您可能必须更多地说明您要达到的目标。你用它做什么?什么时候会出现,你用它做什么网格?

于 2012-10-22T07:25:31.370 回答
0

Texture2DArray 是着色器模型 4 的东西。我不相信你在 dx9 上使用它。

如果您使用的是着色器模型 4,则只需使用函数 Load(4, 5)。

否则,对于 sm1,2,3,您可以将所需的数字(例如 4.0f 和 5.0)作为正常的 texcoord 数据放入您的顶点。然后让像素着色器按纹理大小对其进行缩放。

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 回答