美文网首页
深度缓冲

深度缓冲

作者: 一毛钱 | 来源:发表于2020-03-21 19:29 被阅读0次

深度测试相关知识点:

  • 1、frambuffer 绑定能够管理 多个renderbuffer,然后renderbuffer 可以是深度缓冲区 模板缓冲区以及颜色缓冲区等。

  • 2、默认情况下苹果在创建工程时,并没有提供深度缓冲区。所以iOS openGLES必须设置深度缓冲区才能开启深度检测,设置深度相关操作。同时必须绑定颜色缓冲区进行渲染,当然这里不需离屏渲染,所以不需要给myColorRenderBuffer设置纹理内存空间。

相应设置代码如下:

//3.清空缓存区
-(void)deleteBuffer
{
    if (_myColorRenderBuffer) {
        glDeleteRenderbuffers(1, &_myColorRenderBuffer);
        _myColorRenderBuffer = 0;
    }
    
    if (_myDepthRenderBuffer) {
        glDeleteRenderbuffers(1, &_myDepthRenderBuffer);
        _myDepthRenderBuffer = 0;
    }
    
    if (_myColorFrameBuffer) {
        glDeleteFramebuffers(1, &_myColorFrameBuffer);
    }
}
//4.设置RenderBuffer 关联颜色缓冲区
-(void)setupColorRenderBuffer
{
    glGenRenderbuffers(1, &_myColorRenderBuffer);
    glBindRenderbuffer(GL_RENDERBUFFER, _myColorRenderBuffer);
    
    [self.myContext renderbufferStorage:GL_RENDERBUFFER fromDrawable:self.myEagLayer];
    
    glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &_viewWidth);
    glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &_viewHeight);
    glBindRenderbuffer(GL_RENDERBUFFER, 0);
}

//关联深度缓冲区
- (void)setDepthRenderBuffer{
    
    glGenRenderbuffers(1, &_myDepthRenderBuffer);
    glBindRenderbuffer(GL_RENDERBUFFER, _myDepthRenderBuffer);
    glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, _viewWidth, _viewHeight);
    glBindRenderbuffer(GL_RENDERBUFFER, 0);
    
}
//5.设置FrameBuffer 并且绑定颜色和深度的渲染缓冲区 来管理renderbuffer
-(void)setupFrameBuffer{
    glGenFramebuffers(1, &_myColorFrameBuffer);
    glBindFramebuffer(GL_FRAMEBUFFER, _myColorFrameBuffer);
    
    if (_myColorRenderBuffer) {
        glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, _myColorRenderBuffer);
    }
    
    if (_myDepthRenderBuffer) {
        glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, _myDepthRenderBuffer);
    }
}

效果如下:


相关文章

  • OpenGL-深度测试

    本节了解的内容 什么叫做深度缓冲区。 深度缓冲区的作用。 如何使用深度缓冲区测试。 可视化深度值。 如何解决深度值...

  • OpenGL 模板缓冲区的理解

    OpenGL缓冲区 颜色缓冲区包含颜色索引或者RGBA颜色数据 深度缓冲区存储每个像素的深度值。当启动深度测试时,...

  • 深度/模板测试

    深度测试 深度缓冲(Depth Buffer)存储每个片段的信息,深度缓冲由窗口系统自动创建并将其深度值存储为 1...

  • [6].开启Opengl的深度测试把

    跳去目录 (这里需要先完成demo5) 深度缓冲(Depth buffer) 深度缓冲,也被叫做Z-缓冲,是用来存...

  • OpenGL学习15——深度测试

    深度测试(Depth Testing) 深度缓冲区(depth-buffer) 是与颜色缓冲区类似的一种缓冲区,它...

  • 深度缓冲区

    深度缓冲(Depth Buffer)来防止被阻挡的面渲染到其它面的前面。讨论这些储存在深度缓冲(或z缓冲(z-bu...

  • 深度缓冲

    深度测试相关知识点: 1、frambuffer 绑定能够管理 多个renderbuffer,然后renderbuf...

  • 帧缓冲

    帧缓冲(Framebuffer),由颜色缓冲,深度缓冲,模板缓冲结合,被存储于内存中。 通过帧缓冲可以将你的场景渲...

  • OpenGL 基础渲染(颜色混合)

    OpenGL 混合 OpenGL渲染时会把颜色值存在颜色缓存区中,每个片段的深度值也是放在深度缓冲区。当深度缓冲区...

  • 高级OpenGL-05.帧缓冲(Framebuffers)

    到目前为止,我们使用了几种不同类型的屏幕缓冲:用于写入颜色值的颜色缓冲,用于写入深度信息的深度缓冲,以及允许我们基...

网友评论

      本文标题:深度缓冲

      本文链接:https://www.haomeiwen.com/subject/yemuyhtx.html