OpenGL渲染到纹理有两种方法,第一种是用CopyTexImage2D拷屏,NeHe的教程用的是这种方法;第2种是Frame Buffer Object。两种方法各有千秋,拷屏简单,但是效率低,比如一个粒子系统需要做haze,需要用到render target,那么每个这样的粒子系统都要拷贝屏幕一次,效率就会很差了;当然用hash表存一下也是个不错的选择。FBO和Direct3D的rendertarget 感觉相同,设置一下拷贝到离屏表面;渲染场景,这时屏幕上看不到东西直到取消。不过第一次用的话会掉到很多坑里,再次抱怨下OpenGL的文档实在太烂了。
方法1:CopyTexImage2D
GL.BindTexture(OpenGL.GL_TEXTURE_2D, rendertarget); // Bind To The Texture
GL.CopyTexImage2D(OpenGL.GL_TEXTURE_2D, 0, OpenGL.GL_RGB, 0, 0, width, height, 0);
GL.ClearColor(0.0f, 0.0f, 0.0f, 1.0f);