1

我从 Blender(一种发型)中导出了一些头发颗粒。这些由几行(GL_LINES)组成。我的 openGL 程序可以毫无问题地显示这些粒子。现在我只想在这些粒子上应用光属性。Blender 不会导出法线向量,所以我需要自己计算它们。我知道以下规则:

如果我们将线段定义为二维的 [AB],我们有 dx = xB - xA 和 dy = yB - yA,那么法线是 N1(-dy, dx) 和 N2(dy, -dx)。

我希望我没有犯任何错误。

但是如果我在我的线段坐标中添加 z 维度(例如 A(5,2,3) 和 B(0,0,-5)),我不知道 3D 空间线段定义的规则。

有人可以帮助我吗?

4

2 回答 2

2

如果您假设您可以从两个向量开始,并且看起来就像您所说的那样,请将它们称为 v,w,以获得法向量取叉积。根据具体情况,首先对 v、w 进行归一化并不是一个坏主意。叉积可由下式给出:

v x w =(v_2w_3 - v_3w_2, v_3x_1 - v_1w_3, v_1w_2 - v_3w_1), 

这里 v_i 是 v 的第 i 个分量,依此类推。相邻的数字代表乘法。当然,你有正负这个向量给出两种可能性。

于 2013-04-09T12:48:05.823 回答
2

由于 Aki 忘记了评论不是答案:

3D 空间中的线没有法线。从技术上讲,二维空间中的线也没有法线。他们有两个法线。

垂直于 3D 空间中一条线的方向有无数个。所有这些法线都在同一平面上,但方向不同。如果没有一些更高级的算法(可能基于相邻线),就无法选择其中一个法线而不是另一个法线。

于 2013-04-09T11:19:28.927 回答