多维数据集的顶点法线

时间:2011-02-18 21:06:58

标签: opengl-es

一个立方体有8个独特的顶点。这8个顶点法线(单位矢量)中的每一个与共享该顶点的每个边缘成135度角是真的吗?并且顶点法线向外/向外指向立方体?你的答案在技术上应该是正确的。或者它取决于如何定义(绘制)立方体,就像使用三角形条或索引一样,为立方体的每一侧定义2个三角形?顶点法线的目的是在OpenGL ES应用程序中进行平滑着色和照明。

5 个答案:

答案 0 :(得分:12)

如果立方体由8个唯一顶点定义,那么法线可能会与每条边成135度角。正如您所提到的那样。

但是,正是出于这个原因,通常使用24个顶点来定义立方体。这允许您通过在每个角上“复制”顶点来获得与每个面垂直的顶点法线。以这种方式定义立方体实际上只是定义了6个单独的面,每个面都向外指向。

答案 1 :(得分:4)

使用8个顶点平滑立方体时,有点,以使其看起来像一个球体。你会以这种方式得到一个非常丑陋的球体。绘制立方体的唯一合理方法是使用24个唯一顶点。

答案 2 :(得分:0)

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

There's a good discussion of this topic elsewhere on SO.

答案 3 :(得分:0)

135度可以通过每个顶点的法线向量在视觉上解释,并且必须与顶点所属的每个边共享相同的角度。由于内角为90度270度,因此在该角落的外侧。因此270度/ 2 = 135度。

每个顶点的法向量用于计算三角形的法向量。对于你的三维模型是一个扁平三角形的集合,只有一个法线来计算它的光照会导致平面阴影(如果对象真的那么尖锐,你在物理上是正确的)。使用顶点法线来插值法线'对于三角形的每个点,给出光滑的照明,重新组装光滑的表面。

这种方法的问题是每个顶点只使用一个法线导致立方体具有像球体一样的阴影,同时仍然是一个立方体。

这基本上就是为什么人们想要定义一个24(= 6x4)个顶点而不是6个立方体的原因。这样一个人就可以拥有一个所有面的立方体(因此它的每个两个三角形)都具有正确的(平面) )法线。

具有24个顶点,因此具有24个法线,可以仅为每个三角形/面定义前向法线,使法线点始终与三角形/面成90度角,从而在每个三角形中提供平面阴影/ face对于立方体来说更正确,因为它的表面非常平坦。

通常人们不希望以平滑连续的方式遮挡90度(270)度的陡峭角度。普通插值仅用于模拟有机'平滑'表面。由于这些有机/光滑的表面是常态(想想茶壶或三维图形),因此决定将顶点法线与位置和UV坐标一起存储,因为它是大多数连续&中的标准。 #39; 3d表面。通常,您可以添加更多三角形来表示模型中的平滑拓扑。因此,具有顶点法线是一种权衡,可以最小化平均模型的信息量。

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

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

答案 4 :(得分:-2)

'顶点正常'是什么意思?

我理解每个面的法向量意味着什么。

由于每个顶点由三个面共享(只要立方体不以任何方式退化),角点确实是一个奇点。您获得的法线向量的值会因您旅行的面貌而有所不同。

'顶点正常'是指共享面的法线平均值吗?

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