计算顶点法线
Calculating Vertex Normals
我在谷歌搜索了很多小时没有答案很好地解释,我正在与照明工作,我需要顶点法线,让我们假设我们有这个顶点缓冲(它是一个立方体):
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
};
那么,如何计算顶点法线呢?这是所有。由于
这不是计算它们本身的问题,法线是对象艺术作品的一部分。如果你让每个角的法线点从立方体"向外",它会有一种蓬松的,圆形的外观,而如果你让它们指向正外(垂直于立方体的那一边的平面),你会得到一个清晰的立方体。
如果你有一个更复杂(光滑)的表面,上面有许多三角形,你可以通过平均三角形边的叉积来计算法线。这样看起来最平滑。你对那件事仍然是在作艺术判断。
如果您只有几何图形,但没有法线,那么您可以编写一个小程序来生成每个顶点的法线。一般的过程是对共享给定顶点的面的法线求平均值。然而,对于更"离散"的形状(对不起,数学家),比如立方体,最好只使用一个面法线,只使用一个边的顶点法线。
这个Lighthouse3D教程解释了顶点法线背后的数学,就像这个USC讲座的幻灯片22一样。
相关文章:
- 如何循环打印顶点结构
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 递归函数计算序列中的平方和(并输出过程)
- (C++)分析树以计算返回错误值的简单算术表达式
- 我的字符计数代码计算错误.为什么
- 在计算中使用二的幂有多有利可图
- 如何计算文件中的"columns"数?
- 计算排序向量的向量中唯一值的计数
- 如何使用 std::累积在 C++ 中计算总和立方体
- 使用Qt C++计算类似Git的SHA1哈希
- OpenCV C++.快速计算混淆矩阵
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 有向图 - 如何计算图中彼此顶点可到达的顶点数?
- OpenGL ES:在顶点着色器中计算顶点位置时性能不佳
- 计算世界坐标中z_far平面的顶点
- 通过查找重复顶点从 vec3 对象的向量计算索引
- 用C 计算OpenGL中的顶点正态
- 计算OpenGL C (Gouraud阴影)中的顶点正常
- 将顶点缓冲区绑定到计算着色器以修改数据
- 计算顶点法线