2017-05-28 26 views
0

与えられたメッシュからビルボードを動的に作成しようとしています。私はこれをGraphics.DrawMeshNowでアクティブなレンダリングテクスチャに適用しようとしています。次にrenderTextureをテクスチャ2dに変換します。これは、RenderTextureのコードがどのように動作し、次の描画呼び出しがアクティブなRTにレンダリングされるかを理解したものです。 ReadPixelの場合、アクティブなrtのピクセルを読み取ります。私はまた、レンダリングをレンダリングに貼り付けようとしましたが、texture2dはスキップしましたが運がありません。レンダーメッシュからレンダリングするテクスチャをテクスチャ2Dに変換

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)私が見逃したことは、どのようにしてレンダーテクスチャにメッシュを描画できますか? 2)renderTextureはカメラでのみ使用できますか? 3)どうすればテストできますか? DrawMeshNowがrenderTextureに描画されていることをテストするにはどうすればよいですか?私はコードを一歩進んだが、オブジェクトに含まれていたはずのものがわからないので、手がかりはなかった。私のシーンでは、メッシュが表示されます。これはレンダリングテクスチャではなく、カメラへのレンダリングを依然として示唆しています。

ありがとうございました。

これはエディタスクリプトであり、メニュー/ショートカットで実行されると忘れてしまいました。

質問の編集ReadPixelsが機能するためにDrawMeshNowの後にendofFrameを待つ必要がありますか?

+0

方法の最後にビルボードのテクスチャがGCされているのが問題なのでしょうか?メソッドスコープではなくクラススコープで宣言しようとしましたか? – Draco18s

+0

私は持っていませんでしたが、今もnullオブジェクトを作成しました。私はクラスレベルで宣言し、同じ場所で新しいものを作成します。 – mushcraft

+0

billboardTextureがnullですか?なぜNullReferenceExceptionをスローしないのですか?最後のコード行の後に 'Debug.Log(billboardTexture.name);'を試しましたか? –

答えて

0

テクスチャレンダリングテクスチャからピクセルを読み取ることができたはずです。しかし、一時的なrenderTextureは決して「アクティブ」ではありませんか?私は一時的なレンダリングテクスチャからピクセルを読み取ることができなかったので、最後に2番目のカメラを作成し、カメラにrenderTextureオブジェクトを割り当ててアクティブにした後、そのレンダリングテクスチャからreadPixelを取得しました。

関連する問題