渲染时,在特定的硬件上渲染的三角面片是有限的,那么这种情况下,就应该减少不必要的三角面片,提升性能。那么在进行面剔除时,我们如何知道哪些面属于前面的面(Front facing),哪些面是后面的面(Back facing),渲染时应该丢弃后面的面,来减少gpu在执行片断着色器的命令,OpenGL中通过判断顶点连接的顺序(Winding order)来解决这个问题。
在我们使用OpenGL画一个三角形的时候,三个顶点一定有一个顺序,可能是顺时针也可能是逆时针,但是,我们是能够看到画出来的三角形的。原因是我们没有开启面剔除的状态,开启之后,你就有1/2的概率看不到你画的三角形了--看你定义3个顶点时的顺序了。
开启面剔除命令:glEnable(GL_CULL_FACE),默认情况的是glDisable(GL_CULL_FACE)。
OpenGL中的顺序是什么样的呢?
GL_CW    顺时针Clockwise
GL_CCW    逆时针Counter Clockwise
此外还与观察者的位置有关。

我们并不一定要剔除后面,有时也可能要剔除前面,可以使用glCullFace函数来选择:
glCullFace(GL_BACK);//剔除背面, 默认是剔除GL_BACK
glCullFace(GL_BFRONT);//剔除前面
glCullFace(GL_FRONT_AND_BACK);//剔除前面和背面,这时候没有面片会被渲染, 只保留点与线

默认情况下是GL_BACK,逆时针表示正面,可以通过glFrontFace来设置顺时针还是逆时针:
glFrontFace(GL_CCW);//逆时针是正面, 默认是GL_CCW为正面
glFrontFace(GL_CW);//顺时针是正面

总结
面剔除的使用,分为三个步骤:
1, 启用面剔除功能 : glEnable( GL_CULL_FACE )
2, 指定正面: glFrontFace( GL_CCW )
3, 指定剔除面: glCullFace( GL_BACK )

OpenGL表面剔除相关推荐

  1. OpenGL 面剔除Face culling

    OpenGL面剔除Face culling 面剔除Face culling简介 环绕顺序 面剔除 面剔除Face culling简介 尝试在脑子中想象一个3D立方体,数数你从任意方向最多能同时看到几个 ...

  2. [转]解读Unity中的CG编写Shader系列3——表面剔除与剪裁模式

    在上一个例子中,我们得到了由mesh组件传递的信息经过数学转换至合适的颜色区间以颜色的形式着色到物体上.这篇文章将要在此基础上研究片段的擦除(discarding fragments)和前面剪裁.后面 ...

  3. 【我的渲染技术进阶之旅】OpenGL ES 使用表面剔除和深度测试解决渲染3D模型的时候,出现背面黑点的问题

    文章目录 一.效果对比 1.1 出问题的效果 1.2 修复后正常的效果 二. 什么是 隐藏面消除(Hidden surface elimination)问题? 三.隐藏面消除问题的解决方案 3.1 油 ...

  4. OpenGL Indirect Culling间接剔除实例

    OpenGL 间接剔除实例 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include <shader.h> #include <objec ...

  5. 万字长文详解如何用Python玩转OpenGL | CSDN 博文精选

    作者 | 天元浪子 来源 | CSDN博文精选 [编者按]OpenGL(开放式图形库),用于渲染 2D.3D 矢量图形的跨语言.跨平台的应用程序编程接口,C.C++.Python.Java等语言都能支 ...

  6. 万字长文详解如何用 Python 玩转 OpenGL | CSDN 博文精选

    作者 | 天元浪子 责编 | 伍杏玲 出品 | CSDN 博客 [CSDN 编者按]OpenGL(开放式图形库),用于渲染 2D.3D 矢量图形的跨语言.跨平台的应用程序编程接口,C.C++.Pyth ...

  7. OpenGL基础渲染

    基础图形管线 客户端-服务器 着色器 创建坐标系 使用存储着色器 存储着色器的分类 将点连接起来 点和线 单独的三角形 一个简单的批次容器 不希望出现的图形 多边形偏移 裁剪 混合 多重采样 基础图形 ...

  8. openGL之几何变换(绘制球体)---openGL学习笔记(六)

    openGL中的变换包括:   ①视图(modeling)---指定观察者或者相机位置  GLU.glLookAt() 默认情况下,在透视投影中观察者是从原点向Z轴负方向看去,也可以自行设置.   ② ...

  9. OpenGL完整教程专栏完整目录

    OpenGL完整教程专栏完整目录 专栏说明如下 专栏目录 专栏说明如下 内容:OpenGL完整教程 数量:314篇博文(2023年2月15日截止) 更新时间至:2023年2月15日(后续加上去的博文, ...

  10. 使用opengl绘制立方体_一步步学OpenGL(25) -《Skybox天空盒子》

    教程 25 Skybox天空盒子 原文: http://ogldev.atspace.co.uk/www/tutorial25/tutorial25.html CSDN完整版专栏: https://b ...

最新文章

  1. iOS用什么方式实现对一个对象的KVO?(KVO的本质是什么?)
  2. 日期函数:取过去或者将来多少天的日期
  3. html jQuery/bootstrap通过网络bootcdn导入连接
  4. 前端学习(1694):前端系列javascript之变量计算
  5. Spring学习笔记:尝试Lombok简化实体类代码
  6. Thinkphp报错:fields not exists:[status]
  7. WiFi 空口抓包工具 --- OmniPeek
  8. RFC2544优化步长测试——信而泰网络测试仪实操
  9. paypal如何退款
  10. 《龙之谷》手游服务器数据管理
  11. 四路组相联原理_计算机组成原理中是如何求是几路组相联映像?
  12. 5、hibernate第六课
  13. Linux 字体微调
  14. 常见数据结构在内存中是怎么存储的
  15. 机械振动系统的matlab仿真分析-郭
  16. mMTC面临挑战与研究现状
  17. 哈工大 计算机系统大作业 程序人生-Hello’s P2P From Program to Process
  18. a 标签实现文件下载(解决打开的问题)
  19. 计算机在医学未来的应用,计算机在医疗卫生领域中的应用现状及前景
  20. 自己制作语义分割语义分割数据集

热门文章

  1. MSP432 BSL流程(UART)
  2. 百练2706 麦森数
  3. 请尝试将 `lib` 编译器选项更改为 es2015 或更高版本
  4. 输出的字体全部变成繁体字
  5. SOAP实例入门(转)
  6. 什么是邮箱个人签名?邮箱如何设置个人签名?
  7. HC-SR501人体红外传感器
  8. 功能测试 —— TPShop商城项目
  9. [全解] 刷机, BL 锁, Bootloader, Recovery, Magisk, Root, ADB, 线刷, 卡刷, 9008, 绕过 FRP
  10. Linux系统管理干货总结笔记