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/

相关推荐
扶尔魔ocy8 天前
【qt openGL入门笔记】OSG实现飞机模型在网格图上飞行并进行态势标绘(四)
qt·opengl·osg
:mnong9 天前
Web 三维可视化技术对比:ParaView Web vs 本项目 wasm + Three.js
前端·webgl·opengl·opencl·科学可视化
扶尔魔ocy10 天前
【qt openGL入门笔记】OSG实现显示飞机模型飞行的点迹(二)
qt·opengl·osg
扶尔魔ocy10 天前
【qt openGL入门笔记】OSG实现飞机模型在网格图上飞行(三)
opengl·osg
扶尔魔ocy11 天前
【qt openGL入门笔记】OSG实现飞机模型在网格图上飞行
qt·opengl·osg
扶尔魔ocy15 天前
【qt openGL入门笔记】FPS相机
qt·opengl
扶尔魔ocy15 天前
qt openGL入门笔记】FPS相机和轨道相机
qt·opengl
扶尔魔ocy17 天前
【qt openGL入门笔记】基础光照
qt·opengl
扶尔魔ocy17 天前
【qt openGL入门笔记】坐标系统和摄像机
qt·opengl
茉莉玫瑰花茶20 天前
OpenGL [ 纹理 ]
开发语言·c++·opengl