我想从给定的网格动态创建一个广告牌。我正在尝试使用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);'在最后一行代码之后? –