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/

相关推荐
落魄Android在线炒饭8 天前
Android 实战问题反推 OpenGL 概念(上)
android·opengl
扶尔魔ocy14 天前
【qt openGL入门笔记】windows编译MinGW版本的osgearth(2.10.1)
qt·opengl·osg
扶尔魔ocy15 天前
【QT OpenGL】知识点编目及传送门
qt·opengl·osg
扶尔魔ocy1 个月前
【qt openGL入门笔记】OSG实现飞机模型在网格图上飞行并进行态势标绘(四)
qt·opengl·osg
:mnong1 个月前
Web 三维可视化技术对比:ParaView Web vs 本项目 wasm + Three.js
前端·webgl·opengl·opencl·科学可视化
扶尔魔ocy1 个月前
【qt openGL入门笔记】OSG实现显示飞机模型飞行的点迹(二)
qt·opengl·osg
扶尔魔ocy1 个月前
【qt openGL入门笔记】OSG实现飞机模型在网格图上飞行(三)
opengl·osg
扶尔魔ocy1 个月前
【qt openGL入门笔记】OSG实现飞机模型在网格图上飞行
qt·opengl·osg
扶尔魔ocy1 个月前
【qt openGL入门笔记】FPS相机
qt·opengl
扶尔魔ocy1 个月前
qt openGL入门笔记】FPS相机和轨道相机
qt·opengl