1. 渲染到帧缓存,然后用glReadPixels将需要的部分读入到客户内存,然后使用glTexImage()函数创建纹理
2.渲染到帧缓存,然后使用glCopyTexImage() 直接从帧缓存创建纹理
3.渲染到帧缓存,然后使用glCopyTexSubImage() 从帧缓存中读出需要的部分更新纹理的一部分
4.使用 pbuffer,直接渲染到纹理
用pbuffer的DC 和RC作为渲染设备和渲染上下文执行渲染
5. 使用 framebuffer object (FBO)扩展: GL_EXT_framebuffer_object
将场景渲染到一个同屏幕大小一致的浮点纹理,在通过一些操作处理,能实现一些非常好的效果.
1、使用OpenGL中的一些简单的纹理操作函数也可以达到渲染到纹理的功能
首先建立一个长宽为x,y的空纹理,设置的纹理参数可以按需求改变
......
执行要渲染到纹理的场景......
这样就建立好了,使用的时候就可以直接调用纹理texture绑定使用。
2、使用PBO
建立PBuffer
int pfAttribFList[] = {
g_hDC
g_hGLRC
wglShareLists(m_hWinGLRC, g_hGLRC);
wglMakeCurrent(g_hDC, g_hGLRC);
PBuffer可以看作重新建立的一个隐形窗口,设置像素和投影矩阵,和OpenGL等一些属性
注:设置OpenGL的一些属性,如光照,纹理等,还有透视矩阵等
渲染过程中:
wglMakeCurrent(g_hDC, g_hGLRC);
渲染场景....
调用纹理函数跟新纹理
glBindTexture(GL_TEXTURE_2D, m_uiTexture);
wglMakeCurrent(m_hWinDC, m_hWinGLRC);
调用纹理进行渲染。
3、使用FBO
首先建立空纹理,创建帧缓冲区和深度缓冲区......
glGenFramebuffersEXT(1, &fbo);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
glFramebufferTexture2DEX
glGenRenderbuffersEXT(1, &depth);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, depth);
glRenderbufferStorageEXT
// 建立深度缓冲区
glFramebufferRenderbuffe
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
//
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
// 渲染场景...
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
// 完成渲染后,便可以直接调用纹理进行渲染