我正在尝试从给定的网格动态创建广告牌。我试图将Graphics.DrawMeshNow用于活动的rendertexture,然后将renderTexture转换为纹理2d。这是我对RenderTexture如何通过代码工作的理解,即下一个绘制调用被渲染到活动rt。对于ReadPixel,它读取活动rt的像素。我还尝试将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之后等待endofFrame以使ReadPixels工作?
答案 0 :(得分:0)
我的文档表明你应该能够从Temporary renderTexture ReadPixel中读取像素。但也许一个临时的renderTexture永远不会活跃'?由于我从未能够从临时渲染中读取像素,最后我创建了第二个摄像头,为相机分配了一个renderTexture对象并使其处于活动状态,然后我从该renderTexture中读取了像素。