在自定义效果 docs 中,它说使用这个公式计算像素的相对偏移:
float2 sampleLocation =
texelSpaceInput0.xy // Sample position for the current output pixel.
+ float2(0,-10) // An offset from which to sample the input, specified in pixels.
* texelSpaceInput0.zw; // Multi
对于我的视频音序器,我已经包含了自定义效果和过渡,其中许多效果和过渡从 ShaderToy 的 Glsl 转换为 HLSL。 Glsl 中的代码使用归一化坐标 [0...1] 并且许多计算依赖于绝对 xy 位置,而不是相对位置,因此我必须找到一种在我的 HLSL 代码中使用绝对纹理坐标的方法。
所以,我用那个 zw 乘法器来找到右下角样本的 UV :
float2 FindLast(float2 MV)
{
float2 LastSample = float2(0, 0) + float2(WI,he)* MV;
return LastSample;
}
宽度和高度作为常量缓冲区传递给效果。
之后,归一化坐标为:
float2 GetNormalized(float2 UV,float2 MV)
{
float2 s = FindLast(MV);
return UV / s;
}
这有效。着色器玩具中适用于标准化坐标的代码在我的效果中运行良好。带有该 uv 输入的 D2DSampleInput 返回正确的颜色。
问题是我的解决方案是否可行。例如,我假设左上角的第一个像素位于 uv 0,0,这是否正确可行?
我是 HLSL 和着色器的新手,所以非常感谢您的帮助。