我已经从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空间线段定义的规则。
有人能帮我吗?
3条答案
按热度按时间axzmvihb1#
因为阿基忘了评论不是答案:
3D空间中的线没有法线。从技术上讲,2D 空间中的线也没有法线;它们有两条法线。
在3D空间中,垂直于一条线的方向有无限多个。所有这些法线都在同一个平面上,但方向不同。如果没有更高级的算法(可能基于相邻的线),就无法从这些法线中选择一条法线。
iyr7buue2#
如果你假设你可以得到两个向量,看起来你是这么说的,把它们叫做v,w,得到一个法向量,取叉积,根据情况,把v,w归一化是个不错的主意,叉积可以由下式给出:
这里v_i是v的第i个分量,以此类推,相邻的数字代表乘法,当然,你可以加上或减去这个向量,给出两种可能性。
suzh9iv83#
我有一个类似的问题,甚至使用了不定冠词“a”。有些人认为3D线段没有规范,说它们有无限多个。然而,错过不定冠词“a”--我认为它可能意味着无限中的任何一个。
如果一个人没有两个向量作为起点,会发生什么?
向量是线段或向量的单位向量。创建围绕向量的旋转矩阵以获得无穷范数的1
这花了一些时间,但使用特征模板库和10000个随机测试样本。