我正在尝试在纹理和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;
}我意识到可能会有一定程度的舍入误差,但我认为它会在某种程度上起作用。
谢谢。
发布于 2012-04-24 20:34:22
您将width和height声明为uint。1也是int或uint。如果你把uint和uint相除,你会得到一个uint。因此您的texelSize将始终为(0,0)。
不是除以纹理元素大小,而是乘以宽度和高度:
uint x = uv.x * width;
uint y = uv.y * height;https://stackoverflow.com/questions/10297760
复制相似问题