HLSL Tips 1:如何把输入映射到输出像素

   ----------------------------------------------------------------------
    如需转载请注出处:http://www.cnitblog.com/skyman
   ----------------------------------------------------------------------

     当使用PS来进行2D图像处理的时候,实际上仍然在做3D成像。我们渲染多边形直接和屏幕对齐,然后覆盖在屏幕上。我们直接把2D Pixel Shader应用到这个表面上。

    最常用的方法是用一个简单的与屏幕对齐的矩形(两个三角形)来覆盖屏幕。如果定义了一个3D单位大小的正方形,所有的点在x和y轴范围从-n到n(n一般取0.5或1.0),而z坐标为0。然后用下面的代码将它与屏幕对齐。注意在D3D中,纹理坐标位于每个纹元的中心,而不是以一个角为中心。这个微小的偏移很少能够被肉眼看到。但是,如果想要合成多个成像过程的结果,这就会产生很多问题。每个过程如果没有对准,将会偏移半个纹理元素,这有时是令人讨厌的。

        OutVS.Pos  =  float4(2n * (InVS.Tex.x - n/2) - n / imgWidth,  -2n * (InVS.Tex.y - n/2) + n / imgHeight, 0, 1);

    其中,imgWidth, imgHeight——纹理的宽度和高度(如256×256、512×512等)。另外注意,D3D中的纹理坐标的y轴是以向下为正的,这与屏幕上的对应的图像的y轴方向正好相反。

posted on 2007-07-04 22:46 Skyman 阅读(269) 评论(0)  编辑 收藏 引用 所属分类: GPU
只有注册用户登录后才能发表评论。