【问题标题】:Opengl normal to vectorsOpengl法线向量
【发布时间】:2017-01-05 22:48:22
【问题描述】:

我有很多坐标如下的三角形。我想得到每个顶点的法线,这样我就可以用它来计算光了。

我有立方体法线的代码并且理解这一点,但我真的不知道如何将这些转换(计算)为法线。我只是想知道从这里去哪里的方向。

//TRIANGLE 1
    0.0f, -0.774f, 0.49f,     //6
    0.0f, -1.0f, 0.51f,     //7
   0.156f, -0.982f, 0.47f,     //8

【问题讨论】:

标签: math geometry


【解决方案1】:

可以使用Vector Cross Product 来计算法线。你取两个向量,叉积得到一个法向量。

这两个向量可以通过取三角形的坐标,并从其他两个顶点中减去一个顶点坐标来获得。

即:

vec0 = vert2 - vert0

vec1 = vert1 - vert0

应该相互减去哪些顶点取决于法线应该指向的方向。

请参阅有关如何计算叉积的维基百科文章。在本节的底部,您将看到一个矩阵,它显示了如何计算法线向量的每个分量。

【讨论】:

  • 这种方法是否仍然适用于三角形之间共享的顶点?
  • 我假设您在这里指的是计算平滑法线。你做两件事之一。您可以单独计算每个三角形的法线,并将所有顶点分别存储在几何缓冲区中。如果您的模型具有共享顶点,这将强制您始终为每个三角形在相同位置创建单独的顶点。另一种方法是先分别计算每个三角形的法线,然后为每个顶点确定该顶点所属的三角形,
  • (续)并将所有这些向量相加。归一化结果将为您提供平滑的法线向量。在这种情况下,您应该能够重用共享顶点,因为现在它们都具有相同的法线向量。但请注意:这也会平滑锐边上的法线,这在某些模型上可能看起来非常糟糕。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-16
  • 2013-09-19
  • 1970-01-01
  • 2015-01-11
相关资源
最近更新 更多