前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >16.opengl高级-面剔除

16.opengl高级-面剔除

作者头像
公号sumsmile
发布2020-06-29 15:54:02
7450
发布2020-06-29 15:54:02
举报
文章被收录于专栏:音视频技术学习笔记
一、原理介绍

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

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

面剔除

顺/逆时针

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

二、实现效果

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

正面剔除

三、代码说明

涉及的API也很少

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、原理介绍
  • 二、实现效果
  • 三、代码说明
  • 四、完整代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档