4

我已经在谷歌搜索了很多小时没有很好解释的答案,我正在使用照明,我需要顶点法线,假设我们有这个顶点缓冲区(它是一个立方体):

static const GLfloat g_vertex_buffer_data[] = {
-1.0f,-1.0f,-1.0f,
-1.0f,-1.0f, 1.0f,
-1.0f, 1.0f, 1.0f,
1.0f, 1.0f,-1.0f,
-1.0f,-1.0f,-1.0f,
-1.0f, 1.0f,-1.0f,
1.0f,-1.0f, 1.0f,
-1.0f,-1.0f,-1.0f,
1.0f,-1.0f,-1.0f,
1.0f, 1.0f,-1.0f,
1.0f,-1.0f,-1.0f,
-1.0f,-1.0f,-1.0f,
-1.0f,-1.0f,-1.0f,
-1.0f, 1.0f, 1.0f,
-1.0f, 1.0f,-1.0f,
1.0f,-1.0f, 1.0f,
-1.0f,-1.0f, 1.0f,
-1.0f,-1.0f,-1.0f,
-1.0f, 1.0f, 1.0f,
-1.0f,-1.0f, 1.0f,
1.0f,-1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
1.0f,-1.0f,-1.0f,
1.0f, 1.0f,-1.0f,
1.0f,-1.0f,-1.0f,
1.0f, 1.0f, 1.0f,
1.0f,-1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
1.0f, 1.0f,-1.0f,
-1.0f, 1.0f,-1.0f,
1.0f, 1.0f, 1.0f,
-1.0f, 1.0f,-1.0f,
-1.0f, 1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
-1.0f, 1.0f, 1.0f,
1.0f,-1.0f, 1.0f
};

那么,如何计算顶点法线?就这样。谢谢

4

2 回答 2

8

这不是计算它们本身的问题,法线是对象艺术品的一部分。如果你让每个角的法线点从立方体“向外”,它就会有一种蓬松、圆润的外观,而如果你让它们直接指向外面(垂直于立方体那一侧的平面),你会有一个尖锐的定义的立方体。

如果您有一个包含许多三角形的更复杂(光滑)表面,您可以通过平均三角形边的叉积的值来计算法线。这将给出最平滑的外观。在这种情况下,您仍在进行艺术判断。每个对象都没有一个答案。

于 2013-03-01T01:47:27.430 回答
3

如果你只有几何体,但没有法线,那么你可以编写一个小程序来生成每个顶点的法线。一般过程是平均共享给定顶点的面的面法线。但是,对于更“离散”的形状(对不起,数学家),例如立方体,最好只使用一个面法线并将其用于一侧的顶点法线。

这个 Lighthouse3D 教程解释了顶点法线背后的数学,就像这个 USC Lecture 的幻灯片 22一样。

于 2013-03-01T01:53:31.690 回答