sfi*_*der 6 iphone fbo opengl-es framebuffer render-to-texture
我OpenGLES在iPhone上渲染纹理和屏幕外帧缓冲区时遇到问题.
alt text http://j.imagehost.org/0923/IMG_0020.png alt text http://j.imagehost.org/0725/IMG_0019.png
第一张图片显示CAEAGLLayer直接渲染的麻将牌,这是正确的.第二个显示渲染到屏幕外帧缓冲区的瓦片,使用复制到纹理glCopyTexImage2D和渲染到的纹理CAEAGLLayer.两者都使用白色不透明四边形作为背景.我也尝试直接渲染到纹理,但效果与屏幕外帧缓冲区相同.
我创建帧缓冲区的代码:
GLuint framebuffer;
glGenFramebuffersOES(1, &framebuffer);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, framebuffer);
GLuint renderbuffer;
glGenRenderbuffersOES(1, &renderbuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, renderbuffer);
glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_RGB8_OES,
512, 512);
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES,
GL_RENDERBUFFER_OES, renderbuffer);Run Code Online (Sandbox Code Playgroud)
我通过一次调用从纹理图集中绘制所有图块,glDrawElements使用VBO传递隔行扫描的顶点数据(坐标,纹理坐标,颜色).我使用RGBA8888纹理格式,使用glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)混合功能在两个三角形(四边形)上绘制每个图像.我不使用深度缓冲(在所有情况下).
有人能告诉我可能是什么问题吗?
看来您还没有发布足够的代码,但从发布的内容来看,您似乎将 FBO 中纹理和渲染缓冲区的角色融合在一起。(您的帖子标题说渲染到纹理)您还忘记定义绘制缓冲区。
附加到 FBO 的渲染缓冲区通常用作深度缓冲区。因此请尝试以下操作:
GLuint framebuffer;
glGenFramebuffersOES(1, &framebuffer);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, framebuffer);
//set up the Depth Buffer
GLuint renderbuffer;
glGenRenderbuffersOES(1, &renderbuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, renderbuffer);
glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT24,
512, 512);
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT,
GL_RENDERBUFFER_OES, renderbuffer);
//set up the texture that you will be rendering to
glActiveTexture(GL_TEXTURE0);
GLuint textureID;
glGenTextures(1, &textureID);
glBindTexture(GL_TEXTURE_2D, textureID);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
//add various other texture parameters here
glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGB8_OES, 512,512);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureID, 0);
// define your draw buffers
GLenum drawBuffers[1] = {GL_COLOR_ATTACHMENT0};
glDrawBuffers(1, drawBuffers);
Run Code Online (Sandbox Code Playgroud)
希望有帮助
| 归档时间: |
|
| 查看次数: |
2212 次 |
| 最近记录: |