我正在尝试在texels和uv的
之间进行转换我认为我可以通过1/width
或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;
}
我意识到可能存在某种程度的舍入错误,但我认为它会在某种程度上起作用。
感谢。
答案 0 :(得分:0)
您将宽度和高度声明为uint。 1也是int或uint。如果你划分uint和uint,你会得到一个uint。所以你的texelSize总是(0,0)。
不是除以纹素大小,而是乘以宽度和高度:
uint x = uv.x * width;
uint y = uv.y * height;