我在google上搜索了很多时间没有得到很好解释,我正在使用光照,我需要顶点法线,让我们假设我们有这个顶点缓冲区(它是一个立方体):
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
};
那么,我该如何计算顶点法线? 就这样。感谢
答案 0 :(得分:7)
这不是计算它们本身的问题,法线是对象的艺术品的一部分。如果你使每个角落的正常点从立方体“向外”,那么它将具有一种浮肿的圆形外观,而如果你让它们指向正方形(垂直于立方体那一侧的平面)你会有一个尖锐的定义的立方体。
如果你有一个更复杂(光滑)的表面有许多三角形,你可以通过平均三角形边的叉积的值来计算法线。这样可以提供最流畅的外观。在这种情况下,你仍在做出艺术判断。每个对象都没有一个答案。
答案 1 :(得分:3)
如果你只有几何体而不是法线,那么你可以编写一个小程序来生成每个顶点的法线。一般过程是平均共享给定顶点的面的法线法线。但是,对于更多“离散”形状(对不起数学家),例如立方体,最好只使用一个法线法则,并将其用于一侧的顶点法线。
This Lighthouse3D tutorial和Slide 22 of this USC Lecture一样解释顶点法线背后的数学。