我已经将一些值映射到我的 alpha 通道上的纹理中。实际上我使用我的纹理作为 2Darray。我需要的是一种读取地图位置的alpha值的方法,例如[4] [5](代表x和y)
我需要像素着色器中可用的返回值。有没有办法做到这一点?
我用的是DX9。
提前谢谢!
您想为整个像素着色器使用 [4][5] (x,y) 处的纹素吗?如果这是您的问题,您可以预先计算顶点着色器上的坐标并将其传递给每个顶点,然后使用该 uv 线进行采样。这样它就不会被插值。(或者它会,但它只有一个值可以插值)
除此之外,您可能必须更多地说明您要达到的目标。你用它做什么?什么时候会出现,你用它做什么网格?
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] 之间传递给像素着色器)