2017-05-28 258 views
0

我想從給定的網格動態創建一個廣告牌。我正在嘗試使用Graphics.DrawMeshNow來執行此活動渲染紋理,然後將renderTexture轉換爲紋理2d。這是我對通過代碼執行RenderTexture的理解,下一個繪製調用將呈現給活動的rt。對於ReadPixel,它讀取活動rt的像素。我也嘗試將renderTexture附加到廣告牌上,跳過了texture2d但沒有運氣。渲染網格renderTexture轉換爲Texture2D

var renderTexture = RenderTexture.GetTemporary(width,height,24); 
var billboardTexture = new Texture2D(256, 256,TextureFormat.RGB24,false); 
Graphics.SetRenderTarget(renderTexture); 
Graphics.DrawMeshNow(quad, CurrentActiveGameObject.transform.localPosition,Quaternion.identity); 
billboardTexture.ReadPixels(new Rect(0,0,width,height), 0,0); 
billboardTexture.Apply(); 
billboardTexture.name = name + "_billboardTexture"; 
primMeshRenderer.material.mainTexture = billboardTexture; 

當它到達此代碼塊的最後一行時,billboardTexture爲null。 1)我錯過了什麼,我如何繪製一個網格到renderTexture? 2)我只能用相機使用renderTexture嗎? 3)我怎麼測試這個?我如何測試DrawMeshNow正在繪製到renderTexture?我已經完成了代碼,但沒有給出任何線索,因爲我不太確定這些對象應該包含哪些內容。在我的場景中出現了網格,這意味着它仍然渲染到相機,而不是RenderTexture。

謝謝。

忘了提及這是一個編輯器腳本,並通過菜單/快捷方式執行。

編輯問題在DrawMeshNow之後,爲了使ReadPixels正常工作,是否需要等待endofFrame?

+0

我不知道問題是廣告牌紋理在方法的結尾處​​是GC'd。你是否試過在類作用域而不是方法作用域中聲明它? – Draco18s

+0

我沒有,但只是做了,仍然是一個空對象。我在課堂上申報,並在同一地點以新課程進行創作。 – mushcraft

+0

你確定billboardTexture爲空嗎?爲什麼不拋出NullReferenceException?您是否嘗試過'Debug.Log(billboardTexture.name);'在最後一行代碼之後? –

回答

0

給我的文檔表明您應該能夠從Temporary renderTexture中讀取像素,ReadPixel。但也許一個臨時renderTexture從來沒有'積極'?因爲我從來沒有能夠從Temporary rendertexture中讀取像素,所以最後我創建了第二個攝影機,爲攝影機分配了一個renderTexture對象並使其處於活動狀態,然後我從該renderTexture中讀取了像素。