我想從給定的網格動態創建一個廣告牌。我正在嘗試使用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?
我不知道問題是廣告牌紋理在方法的結尾處是GC'd。你是否試過在類作用域而不是方法作用域中聲明它? – Draco18s
我沒有,但只是做了,仍然是一個空對象。我在課堂上申報,並在同一地點以新課程進行創作。 – mushcraft
你確定billboardTexture爲空嗎?爲什麼不拋出NullReferenceException?您是否嘗試過'Debug.Log(billboardTexture.name);'在最後一行代碼之後? –