2013-06-25 36 views
1

我目前使用下面的紋理適用於TriangleList獲取多邊形的高度和寬度上某個平面

public static VertexPositionColorTexture[] TextureMapping(VertexPositionColorTexture[] vertices, float xScale, float yScale) 
    { 
     bool initialized = false; 

     float x, y; 
     float lX = 0, hX = 0, lY = 0, hY = 0; 

     for (int i = 0; i < vertices.Length; i++) 
     { 

      x = vertices[i].Position.X; 
      y = vertices[i].Position.Y; 

      if (!initialized) 
      { 
       hX = x; 
       lX = x; 
       hX = y; 
       hY = y; 

       initialized = true; 
      } 
      else 
      { 
       if (x > hX) 
       { 
        hX = x; 
       } 
       else if (x < lX) 
       { 
        lX = x; 
       } 

       if (y > hY) 
       { 
        hY = y; 
       } 
       else if (y < lY) 
       { 
        lY = y; 
       } 
      } 


     } 

     float width = (Math.Abs(lX) + Math.Abs(hX))/xScale; 
     float height = (Math.Abs(lY) + Math.Abs(hY))/yScale; 

     for (int i = 0; i < vertices.Length; i++) 
     { 
      vertices[i].TextureCoordinate.X = vertices[i].Position.X/width; 
      vertices[i].TextureCoordinate.Y = vertices[i].Position.Y/height; 
     } 

     return vertices; 

這目前工作正常,具有點的多邊形構成的多邊形都有Z = 0(例如:(0,0,0)(0,10,0)(10,10,0)(10,0,0)),但對於任何旋轉或不平坦沿着z(例子(0,0,0)(0,0,10)(0,10,10)(0,10,0))。我得到的唯一解決方案是獲取多邊形所在的平面(它總是平坦的),並以某種方式旋轉或平移上述方法中的頂點,將其平鋪到xy線以允許正確的高度和寬度待定。任何人都指向正確的方向,或建議其他的東西?

+0

位於xz平面中的多邊形可能是兩種不起作用的情況之一(另一種是位於yz平面中的多邊形)。這是因爲在其中一個方向上沒有程度。因此,你不能真正定義「上」和「右」。你想如何在多邊形上應用紋理?畢竟它可以以某種方式旋轉。您可以檢查寬度或高度是否爲0,而是使用z範圍。順便說一句,寬度和高度的計算看起來有點奇怪。它不應該是'hX - lX'嗎? –

回答

0

通過重寫和旋轉多邊形到z平面來解決這個問題。