1

我正在尝试在纹素和紫外线之间进行转换

1/width我以为我可以通过执行or来定义纹素的大小1/height。除以得到纹素数。

我错了。

这是我一直在尝试做的。

float4 PostPS(PostIn In) : SV_Target
{
    float4 color = 0;

    uint width, height;
    PostTex.GetDimensions(width, height);

    float2 uv = In.texCoord;
    float2 texelSize = float2(1/width, 1/height);

    // Convert coords to texels
    uint x = (uv.x / texelSize.x);
    uint y = (uv.y / texelSize.y);

    // Convert back again to uv.
    uv.x = x * texelSize.x;
    uv.y = y * texelSize.y;

    color = PostTex.Sample(pointFilter, uv);

    return color;
}

我意识到可能存在某种程度的舍入误差,但我原以为它会在某种程度上起作用。

谢谢。

4

1 回答 1

1

您将宽度和高度声明为 uint。1 也是 int 或 uint。如果你将 uint 和 uint 分开,你会得到一个 uint。因此,您的 texelSize 将始终为 (0, 0)。

不要除以纹素大小,而是乘以宽度和高度:

uint x = uv.x * width;
uint y = uv.y * height;
于 2012-04-24T12:34:21.863 回答