Opengl 表面剔除是提高 Opengl 程序渲染效率的一个有效途径。

我们知道,OpenGL 渲染的基本单位是一个个的三角形面片。无论多么复杂的3D 模

型都是由一个个基本的三角型的面片组成的。

既然是一个面片,那必然就有两个面,如果其中有一个面被称为正面,那相应的另一

面就被称为背面。同一时刻我们在看见某一面的同时,另外一面则必然是看不的。

在这里我们可以想象一个封闭的不透明的几何体,我们肉眼只能看到它的外面,而

它的内部我们是看不见的。但如果是从 OpenGL的角度来看,如果没有开启表面剔除,

则可能有很多从一般常识上看来是看不见的那一面(比如几何体内部),它也会去渲

染。这显然会大大降低渲染效率和增加不必要的系统开销。

那如何才能确定哪个面需要渲染,哪个面不需要渲染呢。

在 Opengl 中有所谓的正面还有背面,以及是剔除正面还是剔除背面,都有相应的设

置方法,接下来就详细说明。

 

首先在 OpenGL 中有所谓的“表面剔除”选项。

可以如下调用开启或关闭表面剔除。

glEnable(GL_CULL_FACE);
     glDisable(GL_CULL_FACE);

如果开启了表面剔除的选项,则接下来就必须回答两个问题
     1)什么是正面,什么是背面

2)要剔除正面还是剔除背面

首先回答第一个问题,要如何确定一个面是正面还是背面。

在 OpenGL 中,可以调用 glFrontFace 函数来设定。
     该函数的原型如下:
          void glFrontFace(GLenum mode);

mode  参数的可选的值有 GL_CW 和 GL_CCW(默认值是 GL_CCW)。
          GL_CW   
               表示顶点的排列顺序是顺时针的面是正面。
          GL_CCW 
               表示顶点的排列顺序是逆时针的面是正面(默认值)。

第二个问题,那究竟是要剔除正面还是背面。

这个需要调用 glCullFace 函数来决定。
     该函数原型如下:
          void glCullFace(GLenum mode);

mode 参数有三个可选项
          GL_FRONT                           // 正面剔除
          GL_BACK                              // 背面剔除(默认值)

GL_FRONT_AND_BACK      // 正面、背面都剔除

经过以上设置,Opengl 在渲染图元之前就会根据相关设置选项进行判断,以剔

除不需要渲染的图元,提高渲染的效率。

OPENGL——背面剔除的更多相关文章

  1. OpenGL 背面剔除

    在OpenGL种可使用glEnable(GL_CULL_FACE)开启背面剔除功能,即把那些我们看不见的面删除.但在剔除之前我们需要定义正面和背面,这个可以用法线来理解.在数学学科中,法线是用右手法则 ...

  2. OpenGL学习脚印:背面剔除(Face Culling)

    写在前面 在绘制封闭类型的几何对象时,开启背面剔除功能能够提高渲染性能.本节简要介绍下背面剔除,示例程序可以在我的github下载. 什么是背面剔除 当我们观察场景中对象时,一般只能以一定角度来观察, ...

  3. webgl 背面剔除

  4. 【OPENGL】第三篇 着色器基础(一)

    在这一章,我们会学习什么是着色器(Shader),什么是着色器语言(OpenGL Shading Language-GLSL),以及着色器怎么和OpenGL程序交互. 首先我们先来看看什么叫着色器. ...

  5. 【转载】关于OpenGL的图形流水线

    本文转载自 http://blog.csdn.net/racehorse/article/details/6593719 GLSL教程 这是一些列来自lighthouse3d的GLSL教程,非常适合入 ...

  6. OpenGL基础渲染

    客户端-服务器 客户端是存储在CPU存储器中的,并且在应用程序中执行(或者驱动程序),驱动程序将渲染命令和数据组合起来,发动到服务器执行.服务器和客户机在功能上是异步的,他们是各自独立的软件模块或者硬 ...

  7. OpenGL.教程

    5.第五课:带纹理的立方体.html(http://www.opengl-tutorial.org/cn/beginners-tutorials/tutorial-5-a-textured-cube/ ...

  8. OpenGL.Tutorial16_ShadowMapping

    1. 2. In Tutorial 15 we learnt how to create lightmaps, which encompasses(包含) static lighting. While ...

  9. OpenGL chapter3 基础渲染

    3.1 基础图形管线 三种向OpenGl着色器传递渲染数据的方法:属性,Uniform和纹理.3.2 创建坐标系 3.2.1 正投影 GLFrustum::SetOrthographic(⋯⋯): 3 ...

随机推荐

  1. HTML-学习笔记(属性)

    HTML属性 HTML 标签可以拥有属性.属性提供了有关HTML元素更多的信息. 属性总是以键值对的形式出现.例如 name = "value"; 属性总是在HTML元素的开始标签 ...

  2. sublime自定义快键键不行,

    其实sublime自身就有格式化命令,就不再安装插件,位置在[Edit]->[Line]->[Reindent]但这个默认的命令没有快捷键,就重新定义了一下,想用习惯了的eclipse快捷 ...

  3. repeater 根据输入 返回汉字

    page repeater <asp:Repeater ID="r_scoreCount" runat="server"> <HeaderTe ...

  4. ext 自带搜索功能

  5. 二叉树的遍历(递归,迭代,Morris遍历)

    二叉树的三种遍历方法: 先序,中序,后序,这三种遍历方式每一个都可以用递归,迭代,Morris三种形式实现,其中Morris效率最高,空间复杂度为O(1). 主要参考博客: 二叉树的遍历(递归,迭代, ...

  6. nginx图片处理相关

    nginx本身有支持图片处理的模块,通过外部插件也可以实现此功能. libgd的安装 前提是要有libgd的库文件, (1)去官网访问主页没问题,下载文件还是FQ下的,为了方便大家提供一个链接:htt ...

  7. ViewModelLocator

    ViewModelLocator 这里先鼓舞下士气,ViewModelLocator很简单,甚至可以去掉,它不是Mvvm必须的.在初学Mvvm时,一般都是使用NuGet安装 MvvmLight框架,总 ...

  8. 数据字典生成工具之旅(3):PowerDesign文件组成结构介绍及操作

    从这篇开始将正式讲解整个重要部分的实现细节,本篇讲解Pdm文件的解析.其实PDM文件就是XML文件,可以用Editplus或者VS打开查看.了解到这一点之后大家就能猜到,可以用解析XML的方式读取PD ...

  9. 快速备份和还原 MySQL 数据库的另一种方法

    一直使用 SQL Server 作为公司产品的数据库来存储系统数据,所以备份还原一直都不是问题,因为 SQL Server 的备份还原非常迅速和易用.但今年公司改变策略,使用起 MySQL 数据库作为 ...

  10. React-Native运行知乎日报遇到的问题

    研究几天RN(React-Native)后,跟着官方的demo做了一下电影图片显示的那个,但是总感觉官方的demo欠缺点什么,所以找来找去找到了RN版的知乎日报,话说知乎日报什么版的都有,不信你们上网 ...