计算顶点法线

Spa*_*ark 4 c++ opengl normals vertex

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

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
};
Run Code Online (Sandbox Code Playgroud)

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

Ben*_*son 7

这不是计算它们本身的问题,法线是对象的艺术品的一部分.如果你使每个角落的正常点从立方体"向外",那么它将具有一种浮肿的圆形外观,而如果你让它们指向正方形(垂直于立方体那一侧的平面)你会有一个尖锐的定义立方体.

如果你有一个更复杂(光滑)的表面有许多三角形,你可以通过平均三角形边的叉积的值来计算法线.这样可以提供最流畅的外观.在这种情况下,你仍在做出艺术判断.每个对象都没有一个答案.

  • @Spamdark:您仍然需要在照明代码中*标准化*(确保矢量的长度为*1*)以便计算出数学.你仍然需要一些顶点法线.试试这个网址:http://www.lighthouse3d.com/opengl/terrain/index.php3 ?normals (3认同)