如何使用粒子系统使用Blender导出OBJ文件中的顶点法线(vn)

时间:2013-03-16 15:44:36

标签: graphics 3d blender wavefront

我有一个能够在OpenGL上下文中解析和解释OBJ文件格式的程序。

我在Blender中创建了一个小项目,其中包含一个带有'Hair'粒子的简单球体。

转换后(从球体中分离粒子),我的粒子形成一个新的网格。所以我的项目中有两个网格(名为'Sphere'和'Hair')。当我想在OBJ文件(File / export / Wavefront(.obj))中导出网格'Sphere'时,选择'include Normals',导出后,该文件包含有关法线的所有信息(例如:vn 0.5889 0.14501 0.45455, ...)。

当我尝试用粒子做同样的事情时,也选择'include Normals',我在OBJ文件中没有法线。 (在导出之前,我选择了正确的网格。)

因此,我不会解释为什么不为粒子类型的网格导出法线属性。

以上是我的头发颗粒的一般Blender渲染。如你所见,所有颗粒都与光反应。因此Blender使用法线属性来制作粒子。

enter image description here

现在,上图显示(在Blender'编辑模式' - 转换后>>,粒子由几行组成)。在我的opengl程序中,我使用GL_LINES来渲染相同的粒子。我只想获得法线信息来管理我的粒子上的光属性。

enter image description here

您是否知道如何导出粒子网格的法线属性?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

你正试图给线条提供法线。让我们考虑一下这意味着什么。

当我们谈论表面上的法向量时,我们的意思是“指出表面”

surface normals

对于三角形,当我们将一侧定义为“前”面时,恰好有一个法线。对于直线,任何垂直于直线的向量都算作法线 - 有无穷大,任何一个都会“做”。

我们关心图形法线的原因是什么?

  • 照明:例如通过使用法线与入射光矢量的点积来近似漫射光。这不适用于头发!
  • 获取转换矩阵:为此你可以选择任何法线(你想转换成头发空间吗?)

简而言之:你可以为你的法线选择任何垂直向量(这很容易计算)或者根本不使用法线来完成你的头发。这取决于你想要做什么。