首页 > 解决方案 > 由于OpenGL可以执行内置的背面剔除,它必须计算顶点法线;可以访问这些而不是将它们作为属性发送吗?

问题描述

想了解这一点;目前尚不清楚为什么您必须上传法线,但同时尊重正常计算的缠绕顺序。

标签: openglglsl

解决方案


您在渲染命令中给 OpenGL 的所有顶点都按特定顺序排列。对于数组渲染,这意味着数组中顶点的顺序,由绘图命令指定。对于索引渲染,它是您从中渲染的索引值范围内的索引的顺序。实例化渲染定义每个实例的顶点发生在前一个实例的顶点之后。等等。

三角形的图元组装系统采用此顶点序列并将其分解为三角形,具体取决于您渲染的图元类型。这意味着图元组装系统输出的每个顶点相对于该三角形的其他顶点都有一个顺序;一个顶点首先出现,然后是另一个,然后是第三个。

由于三角形只有 3 个顶点,因此光栅化器有两种方法可以查看此顺序。顶点可以顺时针环绕三角形,也可以逆时针环绕,如屏幕空间所示。这是三角形的缠绕顺序:从屏幕空间看,顶点的明显顺序。

它是用于确定面剔除工作方式的缠绕顺序,而不是正常顺序。GPU 从不计算顶点法线。或任何类型的法线。


推荐阅读