QT之OpenGL面剔除

面剔除是OpenGL的优化技术,用于减少不可见面的渲染。它基于正面和反面进行剔除,默认逆时针为正面。相关函数包括glEnable(GL_CULL_FACE)来开启,glCullFace()设置剔除模式,glFrontFace()定义正反面。在示例中,不同绘制顺序影响了物体的可见性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 概述

面剔除(Face Culling)是属于OpenGL的渲染优化技术,通常一个物体在一个时刻我们只能看到一部分,但是在默认情况下,OpenGL会将所有面都渲染,这样就会造成一定的浪费。面剔除就是用来减少看不到面的渲染。

面剔除是根据正面和反面进行剔除的,默认是逆时针顺序为正面(这个是可以通过函数指定的)。逆时针还是顺时针则是根据片段顶点绘制顺序以及摄像机的方向决定的。
在这里插入图片描述
如上所示,假定看向屏幕的方向即为摄像机的方向,所以左边为反面,右边为正面。

2. 相关函数

  • 开启面剔除
glEnable(GL_CULL_FACE);
  • 指定面的剔除模式
/*
GL_BACK:只剔除背向面,这个是默认值
GL_FRONT:只剔除正向面
GL_FRONT_AND_BACK:剔除正向面和背向面
*/
glCullFace(GL_FRONT);
  • 指定正反面的定义
/*
GL_CCW : 指定逆时针为正面,这是默认值
GL_CW : 指定顺时针为正面
*/
glFrontFace(GL_CCW);

3. Demo

Demo中地面是顺时针顺序绘制,玻璃窗口是逆时针顺序绘制。

  • 以默认的GL_CCW方式绘制,此时地面无法显示
    在这里插入图片描述
  • 以的GL_CW方式绘制,此时玻璃窗口无法显示
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值