Chapter 5-Looking Through a Filter(如何將紋理坐標變換到屏幕坐標)


     本章主要目標講的是過濾與模糊,要用到的一個比較常見的功能就是Render to texture。

     RenderMonkey中直接可以添加可渲染紋理,我們要做的就是完成如何渲染到紋理的代碼。

     書中有一段代碼如下:   

 1 float4x4 view_proj_matrix;  2 float viewport_inv_width;  3 float viewport_inv_height;  4 struct VS_OUTPUT  5 {  6 float4 Pos: POSITION;  7 float2 texCoord: TEXCOORD0;  8 };  9 VS_OUTPUT vs_main(float4 Pos: POSITION) 10 { 11 VS_OUTPUT Out; 12 // Simply output the position without transforming it
13 Out.Pos = float4(Pos.xy, 0, 1); 14 // Texture coordinates are setup so that the full texture 15 // is mapped completely onto the screen
16 Out.texCoord.x = 0.5 * (1 + Pos.x - viewport_inv_width); 17 Out.texCoord.y = 0.5 * (1 - Pos.y - viewport_inv_height); 18 return Out; 19 }

     Out.texCoord.x = 0.5 * (1 + Pos.x - viewport_inv_width);
     Out.texCoord.y = 0.5 * (1 - Pos.y - viewport_inv_height);
     上述公式書中講得不是很仔細,其過程是將紋理坐標變換到屏幕坐標,一個線性映射(干脆就是一次函數更直接點),我們這里做一下簡單的推導:

       紋理坐標范圍為XTex(0,1),YTex(0,1);
       屏幕坐標范圍為XScr(-1,1),YScr(-1,1);
      將紋理坐標變換到屏幕坐標,我們要做的就兩件事:
      1.        將XTex的范圍變換到XScr的范圍中;
                XTex(0,1)=> XScr(-1,1);
      2.        將YTex的范圍變換到YScr的范圍中;
                 YTex(0,1)=> YScr(-1,1);注意:Y方向是要反向的。

      ----------------------------------- X方向推導---------------------------------
       XTex(0,1)=> XScr(-1,1);
       當XTex等於0時,XScr等於-1
       當XTex等於1時,XScr等於1;
       於是我們可以將該變換方程看作是一個過A(0,-1)和B(1,1)的直線,解一個二元一次方程組即可,設直線斜率為k,截距為m,則有XScr = k * XTex+b;
       -1 = 0 * k + b  (1)
       1 = 1* k + b   (2)
       解的b = -1,k = 2;於是我們得到從紋理坐標到屏幕坐標的X方向的變換方程為:
       XScr  = 2 * XTex - 1;

        ---------------------------------- Y方向推導---------------------------------
       YTex(0,1)=> YScr(-1,1);
       //(注意反向)
       當YTex等於0時,YScr等於1
       當YTex等於1時,YScr等於-1;
       於是我們可以將該變換方程看作是一個過A(0,1)和B(1,-1)的直線,解一個二元一次方程組即可,設直線斜率為k,截距為m,則有XScr = k * XTex+b;
       1 = 0 * k + b  (1)
       -1 = 1* k + b   (2)
      解的b = 1,k = -2;於是我們得到從紋理坐標到屏幕坐標的Y方向的變換方程為:
      YScr  =  -2 * YTex + 1 ;
      以上就是從紋理坐標變換到屏幕坐標的推導。

      Screen到Texture跟上邊是互逆變換,很容易從上邊的公式求的  :)

    

   

      //end


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM