问题描述
我正在尝试在我的应用程序中实现锐化、模糊的 hlsl 着色器代码
我参考了 learnopengl 教程并执行了 glsl 代码,这很好
https://learnopengl.com/Advanced-OpenGL/Framebuffers
它不适用这里是我的hlsl代码
exture2D screenTex;
SamplerState splr :register(s0);
const float offsetX =1.0f/1600.0f;
const float offsetY = 1.0f / 900.0f;
float4 main(float2 tc : Texcoord) : SV_TARGET
{
float4 color;
//Kernels
float2 offsets[9] =
{
float2(-offsetX,offsetY),//top - left
float2(0.0f,//top - center
float2(offsetX,//top - right
float2(-offsetX,0.0f),//center-left
float2(0.0f,//center-center
float2(offsetX,//center-right
float2(-offsetX,-offsetY),//bottom - left
float2(0.0f,//bottom - center
float2(offsetX,-offsetY) //bottom-right
};
//for sharpen effect
/*float kernel[9] = {
-1,-1,9,-1
};*/
float kernel[9]=
{
1.0f / 16.0f,2.0f / 16.0f,1.0f / 16.0f,4.0f / 16.0f,1.0f / 16.0f
};
float3 col = float3(0.0f,0.0f,0.0f);
[unroll]
for (int i = 0; i < 9; ++i)
{
col += screenTex.Sample(splr,tc + offsets[i]).rgb * kernel[i];
}
color = float4(col,1.0f);
return color;
}
如果我运行这些代码,我的场景没有变化
我认为纹理坐标的纹理采样存在问题
它确实工作正常
有什么问题需要帮助
解决方法
当采样纹理坐标操作不起作用时,我发现 hlsl 有什么问题
col += screenTex.Sample(splr,tc + offsets[i]).rgb * kernel[i];
你应该像这样使用索引
screen.Sample(splr,tc,int2(x,y)
我不确定是否有其他方法可以修改纹理坐标