美文网首页
OpenGL正背面剔除

OpenGL正背面剔除

作者: 旅行者_sz | 来源:发表于2020-07-13 10:57 被阅读0次

1.在渲染过程中可能产生的问题

在绘制3D场景的时候,我们需要决定哪些部分是对观察者 可⻅见的,或者哪些部分是对观察者不不可⻅见的.对于不不可⻅见的 部分,应该及早丢弃.例例如在⼀一个不不透明的墙壁后,就不不应该 渲染.这种情况叫做”隐藏⾯面消除”(Hidden surface elimination).


2.1解决方式---油画算法

  • 定义:先绘制场景中的离观察者较远的物体,再绘制较近的物体.
  • 例如下面的图例: 先绘制红色部分,再绘制⻩色部分,最后再绘制灰色部分,即可解决隐藏⾯消除的问题。


    油画算法
  • 存在的弊端:使⽤油画算法,只要将场景按照物理距离观察者的距离远近排序,由远及近的绘制即可.那么会出现什么问题? 如果三个三角形是叠加的情况,油画算法将⽆法处理。


    交替叠加的三角形

2.2解决方式---正背面剔除

  1. 原理
    OpenGL 可以做到检查所有正⾯面朝向观察者的⾯面,并渲染它们。从⽽而丢弃背⾯面朝向的⾯面。这样可以节约⽚片元着⾊色器器的性能,渲染的性能即可提高超过50%

  2. 正背面区分
    正面: 按照逆时针顶点连接顺序的三角形面
    背面: 按照顺时针顶点连接顺序的三角形面

    image
  3. 正背面区分问题:正⾯和背⾯是有三角形的顶点定义顺序和观察者方向共同决定的。若观察者的观察⽅向发生改变,正⾯和背面也会发生相应的改变。

  • 当观察者在右侧时:右边的三角形为逆时针方向,则为正面;而左侧的三⻆形为顺时针,则为背⾯。
  • 当观察者在左侧时:左边的三⻆形为逆时针⽅向,则为正⾯;而右侧的三⻆形为顺时针,则为背⾯。
  1. 弊端:如果前后两个点都是正面或是背面,这时OpenGL无法区分哪个面在前,哪个面在后,就可能出现下图所示的问题。

    image
  2. 有关正背面剔除函数

  • 开启表面剔除(默认背面剔除)
void glEnable(GL_CULL_FACE);

  • 关闭表面剔除(默认背面剔除)
void glDisable(GL_CULL_FACE);

  • ⽤户选择剔除那个面(正面/背面)
void glCullFace(GLenum mode);
mode参数为: GL_FRONT,GL_BACK,GL_FRONT_AND_BACK ,默GL_BACK

  • 用户指定那个为正面
void glFrontFace(GLenum mode);
mode参数为: GL_CW,GL_CCW,默认值:GL_CCW 

  • 例如,剔除正面实现(1)
glCullFace(GL_BACK); 
glFrontFace(GL_CW);

  • 例例如,剔除正⾯面实现(2)
glCullFace(GL_FRONT);
glFrontFace(GL_CCW);

相关文章

  • OpenGL深度测试

    在上一篇OpenGL正背面剔除中提到了正背面剔除的弊端:如果前后两个点都是正面或是背面,这时OpenGL无法区分哪...

  • OpenGL正背面剔除

    一、在渲染过程中可能产生的问题 1. 原因 在绘制3D场景的时候,我们需要决定哪些部分是对观察者可见的,或者哪些部...

  • OpenGL 正背面剔除

    在渲染过程中可能存在的问题 在绘制3D场景的时候,我们需要决定哪些部分是对观察者可见的,或者哪些部分是对观察者不可...

  • OpenGL: 正背面剔除

    案例分析 1.用平面着色器绘制一个环并旋转, 效果如下: 一切看似没有问题. 2.再用光源着色器绘制一个立体环并旋...

  • OpenGL正背面剔除

    1.在渲染过程中可能产生的问题 在绘制3D场景的时候,我们需要决定哪些部分是对观察者 可⻅见的,或者哪些部分是对观...

  • OpenGL 正背面剔除

    OpenGL 在绘制三维立体图形时, 如果不做处理, 就会产生一些不符合常理或者逻辑问题, 本次讲述正背面显示错...

  • OpenGL正背面剔除

    隐藏⾯面消除 Hidden surface elimination 在绘制3D场景的时候,我们需要决定哪些部分是对...

  • OpenGL 基础渲染(深度测试)

    OpenGL 基础渲染(正背面剔除) - 简书 在上文案例使用了正背面剔除后,出现了新的问题。如下图所示,那我们要...

  • OpenGL--- (四)OpenGL渲染技巧:正背面剔除

    一、什么是正背面剔除? 正背面剔除方案,是OpenGL中针对图形绘制的一种技巧,主要用于处理立体图形绘制时,只绘制...

  • OpenGL--正背面剔除

    1. 背景 在绘制3D场景时,为了尽可能的逼真,需要有远小近大的效果,而且可能会出现互相遮盖的情况。我们需要决定哪...

网友评论

      本文标题:OpenGL正背面剔除

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