OPenGL面剔除

为什么需要面剔除

一个封闭立方体,任何角度最多看到 3 个面,另外 3 个面永远看不到。如果不画它们,节省超过 50% 的片段着色器开销。

怎么判断正反面

通过顶点的连接顺序,定义能看到一个三角形时,它一定是正面朝向吗,opengl采用右手坐标系,因此定义的三角形应该是逆时针的,这个判断变化在光栅化之前,用的是屏幕空间的投影坐标。

同样的定义一段正面三角形1->2->3,是逆时针。在背面看按照123的顺序,是顺时针。因此被判定为背面。只需要定义一次顶点顺序,当三角形背对你时,它的屏幕空间环绕方向会自动翻转,GPU 自动把它识别为背面。

相关API

OpenGL Unity Shader
glEnable(GL_CULL_FACE) 默认就开启了
glCullFace(GL_BACK) Cull Back背面剔除(默认)
glCullFace(GL_FRONT) Cull Front正面剔除
glCullFace(GL_FRONT_AND_BACK) 没直接对应(相当于不画了)
glFrontFace(GL_CCW) 不需要手动设,Unity 按平台自动处理
不开启面剔除 Cull Off

默认值是GL_CCW,它代表逆时针,GL_CW代表顺时针顺序。

参考文章:面剔除 - LearnOpenGL-CNhttps://learnopengl-cn.readthedocs.io/zh/latest/04%20Advanced%20OpenGL/04%20Face%20culling/

相关推荐
又吹风_Bassy3 天前
WhatsCanvas教程-第九章:窗口呈现与交互
canvas·opengl·skia·2d渲染库·nanovg·whatscanvas·2d图形库
又吹风_Bassy6 天前
WhatsCanvas教程-第三章:画笔 Paint 详解
canvas·opengl·skia·2d渲染库·nanovg·whatscanvas·2d图形库
又吹风_Bassy7 天前
WhatsCanvas教程-第二章:基础图形绘制
canvas·opengl·skia·2d渲染库·nanovg·whatscanvas·2d图形库
郝学胜-神的一滴7 天前
CMake 047:解锁安装阶段自定义操作,告别配置阶段提前执行坑
运维·服务器·c++·游戏引擎·图形渲染·opengl
令狐掌门10 天前
OpenGL是个状态机,如何理解
opengl
郝学胜-神的一滴19 天前
Horse3D 游戏引擎研发笔记(七):Clydesdale——从流式日志到多输出订阅
c++·qt·unity·游戏引擎·图形渲染·unreal engine·opengl
郝学胜-神的一滴22 天前
[简化版 GAMES 104] 现代游戏引擎 06:从Tick时序到邮局模型,拆解确定性世界的底层密码
开发语言·c++·游戏引擎·图形渲染·软件开发·opengl
程序员老陆1 个月前
OpenGL 在视频渲染里的角色:它到底加速了什么?
音视频·gpu·opengl
郝学胜-神的一滴1 个月前
[简化版 GAMES 104] 现代游戏引擎 05:游戏引擎世界构建核心机制深度解析
c++·程序人生·unity·游戏引擎·计算机图形学·opengl