----------------------------------------------------------------------
如需转载请注出处:
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轴方向正好相反。