如何解决直接 2D HLSL 像素着色器坐标空间
在自定义效果 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 和着色器的新手,所以非常感谢您的帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。