2013-07-30 93 views
1

我目前正在嘗試在Unity中創建一個容器,其中包含多個四邊形,並且正在尋找一種方法來停止渲染容器邊界之外的四邊形部分?Unity3d渲染基於位置的紋理

我只花了20分鐘試圖找出如何正確解釋問題(並失敗),所以創建了這個漂亮的圖片。紅線表示黑色方塊代表我紋理四邊形的邊界。

enter image description here

+0

確保張貼在統一的答案,你就更有可能得到迴應那裏。 – stevepkr84

+0

感謝您的提示,會做 – kgpmurray

+1

您的問題是關於細節的一點點。你是在紋理上做這一切還是Unity中的四邊形實際網格?如果是網格,則需要執行數學運算來切出超出範圍的四邊形或使用着色器將超出範圍的像素設置爲透明。這兩個選項都不容易在SO答案中表達。 – Jerdak

回答

0

試試這個:

private Rect ClipRectToScreen (Rect input) 
        { 
          // Special handling for screen reading of render texture so it always stay in visible area. 
          // Will throw error withoud this fix. 
          Rect r; 
          r = new Rect (input.x, (Screen.height - input.y - input.height) , input.width, input.height); 
          if (r.x < 0f) { 
            r.width = r.width - UnityEngine.Mathf.Abs (r.x); 
            r.x = 0f; 
    //        Debug.Log ("x < 0"); 
          } 
          if (r.y < 0f) { 
            r.height = r.height - UnityEngine.Mathf.Abs (r.y); 
            r.y = 0f; 
    //        Debug.Log ("y < 0"); 
          } 
          if (r.x > Screen.width) { 
            r.width = r.width - UnityEngine.Mathf.Abs (r.x); 
            r.x = 0f; 
    //        Debug.Log ("x > Screen.width"); 
          } 
          if (r.y > Screen.height) { 
            r.height = r.height - UnityEngine.Mathf.Abs (r.y); 
            r.y = 0f; 
    //        Debug.Log ("y > Screen.height"); 
          } 
          if ((r.x + r.width) > Screen.width) { 
            r.width = Screen.width - r.x; 
    //        Debug.Log ("r.x + r.width > Screen.width"); 
          } 
          if ((r.y + r.height) > Screen.height) { 
            r.height = Screen.height - r.y; 
    //        Debug.Log ("r.y + r.height > Screen.height"); 
          } 

          return r; 
        }