hi everyone, I want to render something to a renderTexture by using functions of GL class, and then use this texture for render other things. I can get the correct result in rendering to screen, but can’t render to the renderTexture. How can I do it?
The script attached to mainCamera as follow, which with a diffuse material and a renderTexture draged to it.
(Forgive my poor English, and Thanks in advance )
using UnityEngine;
using System.Collections;
public class RenderSomething2Texture : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
public Material mat;
public RenderTexture _renderTexure;
public GameObject cube;
//Failed to render to textue.
void OnPreRender(){
cube.GetComponent<MeshRenderer>().material.mainTexture = _renderTexure;
RenderTexture.active = _renderTexure;
float offset = 0;
GL.PushMatrix();
GL.LoadOrtho();
//GL.LoadPixelMatrix(0, (int) RenderTextureSetting.kBumpTexSize, 0, (int) RenderTextureSetting.kBumpTexSize);
//GL.Viewport(new Rect(0, 0, (float) RenderTextureSetting.kBumpTexSize, (float) RenderTextureSetting.kBumpTexSize));
GL.Clear( false, true, Color.black );
mat.SetPass(0);
GL.Begin(GL.TRIANGLE_STRIP);
GL.TexCoord2(offset, 1.0f + offset);
GL.Vertex3(0.0f, 1.0f, 0.5f);
GL.TexCoord2(1.0f + offset, 1.0f + offset);
GL.Vertex3(1.0f, 1.0f, 0.5f);
GL.TexCoord2(offset, offset);
GL.Vertex3(0.0f, 0.0f, 0.5f);
GL.TexCoord2(1.0f + offset, offset);
GL.Vertex3(1.0f, 0.0f, 0.5f);
GL.End();
GL.PopMatrix();
RenderTexture.active = null;
}
//Render to screen is OK.
void OnPostRender(){
float offset = 0;
GL.PushMatrix();
GL.LoadOrtho();
//GL.LoadPixelMatrix(0, (int) RenderTextureSetting.kBumpTexSize, 0, (int) RenderTextureSetting.kBumpTexSize);
//GL.Viewport(new Rect(0, 0, (float) RenderTextureSetting.kBumpTexSize, (float) RenderTextureSetting.kBumpTexSize));
GL.Clear( false, true, Color.black );
mat.SetPass(0);
GL.Begin(GL.TRIANGLE_STRIP);
GL.TexCoord2(offset, 1.0f + offset);
GL.Vertex3(0.0f, 1.0f, 0.5f);
GL.TexCoord2(1.0f + offset, 1.0f + offset);
GL.Vertex3(1.0f, 1.0f, 0.5f);
GL.TexCoord2(offset, offset);
GL.Vertex3(0.0f, 0.0f, 0.5f);
GL.TexCoord2(1.0f + offset, offset);
GL.Vertex3(1.0f, 0.0f, 0.5f);
GL.End();
GL.PopMatrix();
}
}