几何着色器四柱后处理

时间:2014-05-19 16:04:57

标签: directx-11 quad geometry-shader uv-mapping post-processing

使用directx 11,我正在使用一个图形效果系统,该系统使用几何着色器在世界空间中构建四边形。然后,这些四边形使用片段着色器,其中主纹理是渲染的场景纹理。在qorld space四边形上有效地产生后期处理效果。最简单的是色彩效果。

顶点着色器仅将数据传递到几何着色器。

几何着色器根据法线计算额外顶点。使用叉积,我找到x和z轴,并在原始位置的每个对角线方向上添加4个新顶点的三个流(从给定位置和大小生成四边形)。

像素着色器(色调效果)简单地将场景纹理颜色与颜色变量集相乘。

四元组在屏幕上正确生成并显示。然而;

我面临的问题是uv坐标的映射无法与后台缓冲区上的图像对齐。也就是说,当使用半角alpha作为给定颜色的色调着色器时可以看到四边形上显示的图像没有完美地覆盖后缓冲区上的图像,除非四边形朝向相机。四边形法线越接近相机y轴,图像越倾斜。

我目前正在使用下面的公式计算uv坐标:

    float2 uv = vert0.position.xy / vert0.position.w;
    vert0.uv.x =  uv.x * 0.5f + 0.5f;
    vert0.uv.y = -uv.y * 0.5f + 0.5f;

我也使用了下面的公式,这导致了(IMO)在uv的观点中没有采用观点。

    float2 uv = vert0.position.xy / SourceTextureResolution;
    vert0.uv.x =  uv.x * ASPECT_RATIO + 0.5f;
    vert0.uv.y = -uv.y + 0.5f;

问题: 如何根据几何着色器中生成的顶点位置获取屏幕空间uv坐标?

如果您希望我详细说明任何一点,请询问我将尽我所能:)

提前致谢。

0 个答案:

没有答案