美文网首页
16.opengl高级-面剔除

16.opengl高级-面剔除

作者: 天叔 | 来源:发表于2020-06-28 23:50 被阅读0次

一、原理介绍

这一节比较简单,从相机方向看,一个3D形状的图形总有部分面是看不到的,这部分看不到的片元可以剔除掉,不参与计算,以提升渲染效率。前提是图形必须是闭合的,比如正方体,能节省50%以上的时间。

实现逻辑简单巧妙,假设我们能看到的面上定义一个三角形,三角形的三个顶点按逆时针来组织绘制顺序,那么光栅化阶段,背面的三角形变成了顺时针,那么就可以剔除掉。参考下图:

面剔除 顺/逆时针

之前定义图形,比较随意,如果要实现面剔除,就得每个三角形严格按照正面能看到时的顺时针方向来组织顺序了,有没有感觉很费劲?对于复杂的图形应该有工具可以导出坐标吧?

二、实现效果

方便观察,效果图按照正面剔除(反向剔除)来实现 正面剔除

三、代码说明

涉及的API也很少

  1. 启动面剔除(默认是禁止态)
glEnable(GL_CULL_FACE);
  1. 如果实现上面的效果--正面剔除,正常情况下不会这么干,默认是GL_BACK
glCullFace(GL_FRONT);

//glCullFace有三个可用的选项
//GL_BACK:只剔除背向面。
//GL_FRONT:只剔除正向面。
//GL_FRONT_AND_BACK:剔除正向面和背向面。
  1. 还有更丰富的操作,定义逆时针是正面,感觉正常情况也不会这么干
glFrontFace(GL_CCW);

四、完整代码

本章节实在太简单,不贴完整代码了

相关文章

  • 16.opengl高级-面剔除

    一、原理介绍 这一节比较简单,从相机方向看,一个3D形状的图形总有部分面是看不到的,这部分看不到的片元可以剔除掉,...

  • 高级OpenGL-04.面剔除(Face culling)

    尝试在头脑中想象一下有一个3D立方体,你从任何一个方向去看它,最多可以同时看到多少个面。如果你的想象力不是过于丰富...

  • 混合、面剔除

    混合 在OpenGL中,物体透明技术通常被叫做混合(Blending)。透明是物体(或物体的一部分)非纯色而是混合...

  • opengl学习-面剔除

    OpenGL能够检查所有面向观察者的面,并渲染它们,而丢弃那些背向的面,以节省片段着色器调用。我们要做的就是告诉O...

  • 股初10~构建白马股

    经过ROE筛选 剔除周期股 剔除基本面转坏的 用小熊1剔除美化收入的 用小熊2、3剔除美化资产的 以上实操用爱问财...

  • OpenGL ES for Android(面剔除)

    简介 首先我们绘制一个立方体,想象一下能看到几个面。一般情况下我们最多能看到三个面,极端的情况我们甚至只能看到一个...

  • OpenGL学习18——面剔除

    面剔除(Face culling) OpenGL会检查所有面片,渲染那些面向视角的面片而丢弃那些背向的,减少片元着...

  • OpenGL --面剔除和深度测试

    当我们以某一视角观察一个多面立体图形的时候,我们的肉眼只能看到一部分面积,也就是我们的视线正前方的面,例如观察一个...

  • 8、OpenGL初探之OpenGL图像渲染对隐藏面消除的理解

    直接开始正题,还是以我们的甜甜圈为例子,先看一下隐藏面剔除前后的效果,然后再解释一下隐藏面剔除的应用场景和好处 一...

  • 12.22音频:财务三表分析( 1 )如何识别收入美化

    课程回顾-白马股的特点 ①投资回报率高:连续7年ROE≥15% ②长期业绩优秀:剔除周期股,剔除基本面转坏的股票 ...

网友评论

      本文标题:16.opengl高级-面剔除

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