(自用)learnOpenGL-高级OpenGL-面剔除Face Culling

一个立方体有6个面,但是我们最多只能看大3个面,所以如果我们可以丢弃那几个面,就可以加速我们的程序了。

但是问题也来了,我们如何确定哪些面camera能够看到,哪些不能看到。

我们现在规定:我们只画面向用户的面!

什么意思?一个面他都有两面,一面面向用户,一面背对。我们只画面向用户的。或者说,我们现在的问题变成了如何规定正向面和背向面。

在opengl中有个很聪明的技巧,就是分析顶点数据的环绕方式

我们在定义一组三角形顶点的时候,肯定是要么顺时针表示,要么逆时针表示。

在opengl中,逆时针表示的面为正向面,顺时针为被向面。

所以我们在最初定义顶点时就要考虑顺序了。

实战

和前面一样,首先需要开启面剔除。

glEnable(GL_CULL_FACE);

同时我们也可以自定义到底是去丢弃逆时针还是顺时针

当我飞到箱子内部的时候会发现背面没有了

可以看到,面剔除是一个提高OpenGL程序性能的很棒的工具。但你需要记住哪些物体能够从面剔除中获益,而哪些物体不应该被剔除。

但是也能看到,前一章的窗户没有了,但是从背面又可以看到,这是因为 窗户的三角形是顺时针的。所以在画窗户的时候需要关闭面剔除。

ok重新出现。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值