需求:自己渲染器生成的纹理是A,Unity里的virtual camera生成的纹理是B,正常情况下眼镜里看到的是B,我想着直接用A替换掉B。
了解Unity渲染脚本的生命周期:
对于我们的需求,关键的是Scene Rendering这一块内容。我们要做的就是改变OnRenderImage
的内容,给他截胡,不让它往下一步传输原有纹理内容。
解决方案:
void OnRenderImage(RenderTexture src, RenderTexture dest)
{
//获取自己写的Main脚本中的buffer数据
byte[] Texbuffer = root.GetComponent<Main>().buffer;
Texture2D tex2d = new Texture2D(width, height, TextureFormat.RGBA32, false);
tex2d.LoadRawTextureData(Texbuffer);
tex2d.Apply();
RenderTexture out_renderTexture = new RenderTexture(width, height, 0);
//将buffer数据替换到相机最终的显示纹理
RenderTexture.active = out_renderTexture;
Graphics.Blit(tex2d, out_renderTexture);
Graphics.Blit(out_renderTexture, dest);
}