Opengl es 立方体的顶点法线

Opengl es 立方体的顶点法线,opengl-es,Opengl Es,立方体有8个唯一的顶点。这8条顶点法线(单位向量)中的每一条都与共享该顶点的每条边形成135度角,这是真的吗?顶点法线指向立方体外/外?你的回答在技术上应该是正确的。或者它取决于立方体的定义(绘制)方式,比如使用三角形条带或索引为立方体的每一侧定义2个三角形?顶点法线的用途是在OpenGL ES应用程序中平滑着色和照明。如果立方体由8个唯一的顶点定义,则法线可能与每条边形成135度角,如您所述 然而,正是由于这个原因,立方体通常使用24个顶点来定义。通过在每个角点“复制”顶点,可以使顶点法线与每

立方体有8个唯一的顶点。这8条顶点法线(单位向量)中的每一条都与共享该顶点的每条边形成135度角,这是真的吗?顶点法线指向立方体外/外?你的回答在技术上应该是正确的。或者它取决于立方体的定义(绘制)方式,比如使用三角形条带或索引为立方体的每一侧定义2个三角形?顶点法线的用途是在OpenGL ES应用程序中平滑着色和照明。

如果立方体由8个唯一的顶点定义,则法线可能与每条边形成135度角,如您所述


然而,正是由于这个原因,立方体通常使用24个顶点来定义。通过在每个角点“复制”顶点,可以使顶点法线与每个面垂直。用这种方法定义立方体实际上就是定义6个单独的面,每个面都适当地指向外面。

什么是“顶点法线”

我知道每个面的法向量是什么意思

由于每个顶点由三个面共享(只要立方体不以任何方式退化),因此角点实际上是一个奇点。根据所沿的面,法线向量的值会有所不同

那么“顶点法线”对您来说是指共享面的法线的平均值吗


三线性立方体将具有线性边和平面边,但这只是定义三维形状的一种方法。可以使用高阶多项式作为形状函数;这些会使你的生活复杂化。你的图形库允许这样做吗?

为了使立方体看起来像一个球体,用8个顶点对立方体进行平滑处理是不可行的。这样你会得到一个非常难看的球体。绘制立方体的唯一合理方法是使用24个唯一的顶点。

立方体八个角顶点的中心法线实际上与每个连接边形成125度16分钟的角度


135度可以通过每个顶点向外的法向量直观地解释,并且必须与顶点所属的每个边共享相同的角度。由于内角为90度,因此此角向外为270度。因此270度/2=135度

每个顶点的法向量用于计算三角形的法向量。由于三维模型是平面三角形的集合,因此只有一条法线用于计算照明,这将导致平面着色(如果对象真的那么尖锐,则在物理上是正确的)。使用顶点法线为三角形的每个点插值“法线”,可提供平滑照明,重新组合平滑曲面

这种方法的问题是,仅使用单个顶点法线会导致立方体在仍然是立方体的情况下具有类似球体的着色

这就是为什么要定义一个有24(=6x4)个顶点而不是6个顶点的立方体的基本原因。通过这种方式,可以使一个立方体的所有面(以及它的每两个三角形)都具有正确的(平面)法线

有24个顶点,因此有24条法线,可以为每个三角形/面仅定义前向法线,以便法线始终指向与三角形/面成90度角的位置,从而在每个三角形/面上提供平坦的着色,这对于立方体来说更为正确,因为立方体的曲面实际上是真实的平坦的

通常,人们不希望以平滑连续的方式对90度(270度)这样的陡峭角度进行着色。法线插值仅用于模拟“有机”/“平滑”曲面。由于这些有机/平滑曲面是标准曲面(考虑茶壶或3d图形),因此决定使用位置和UV坐标存储顶点法线,因为它是大多数“连续”3d曲面的标准曲面。通常,可以添加更多三角形来表示模型中的平滑拓扑。因此,拥有顶点法线是一种折衷办法,可以最大限度地减少平均模型的信息量

因此,具有所有平面三角形的立方体模型是最坏的情况。这就是为什么立方体的每个角都需要三条顶点法线,每个面对应一条法线

PS:今天,这些“平滑”曲面通过使用从更高分辨率模型烘焙的法线贴图进行进一步定义。使用法线贴图,面中的每个点都会获得自己的法线向量(或者可以从贴图法线贴图提供的法线向量样本中插值每个点的法线向量)