小编sb.*_*sb.的帖子

OpenGL ES渲染到纹理,然后绘制纹理

我正在尝试渲染纹理,然后使用iPhone上的OpenGL ES将该纹理绘制到屏幕上.我正在使用这个问题作为起点,并在Apple的演示EAGLView的子类中进行绘图.

实例变量:

GLuint textureFrameBuffer;
Texture2D * texture;
Run Code Online (Sandbox Code Playgroud)

要初始化帧缓冲区和纹理,我这样做:

GLint oldFBO;
glGetIntegerv(GL_FRAMEBUFFER_BINDING_OES, &oldFBO);

// initWithData results in a white image on the device (works fine in the simulator)
texture = [[Texture2D alloc] initWithImage:[UIImage imageNamed:@"blank320.png"]];

// create framebuffer
glGenFramebuffersOES(1, &textureFrameBuffer);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, textureFrameBuffer);

// attach renderbuffer
glFramebufferTexture2DOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_TEXTURE_2D, texture.name, 0);

if(glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES)
    NSLog(@"incomplete");

glBindFramebufferOES(GL_FRAMEBUFFER_OES, oldFBO);
Run Code Online (Sandbox Code Playgroud)

现在,如果我像往常一样将我的场景画到屏幕上,它可以正常工作:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// draw some triangles, complete with vertex normals
[contentDelegate draw];
[self swapBuffers];
Run Code Online (Sandbox Code Playgroud)

但是,如果我渲染到'textureFrameBuffer',然后在屏幕上绘制'纹理',则生成的图像会颠倒并"向内".也就是说,看起来三维物体的法线指向内部而不是外部 - 每个物体的最前面是透明的,我可以看到背面的内部.这是代码:

GLint oldFBO;
glGetIntegerv(GL_FRAMEBUFFER_BINDING_OES, &oldFBO); …
Run Code Online (Sandbox Code Playgroud)

iphone opengl-es render-to-texture

7
推荐指数
1
解决办法
2万
查看次数

标签 统计

iphone ×1

opengl-es ×1

render-to-texture ×1