【问题标题】:How to export vertex normal (vn) in OBJ file with Blender using particle system如何使用Blender使用粒子系统在OBJ文件中导出顶点法线(vn)
【发布时间】:2013-03-05 06:39:34
【问题描述】:

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

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

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

当我尝试对粒子做同样的事情时,也选择“包含法线”,我在 OBJ 文件中没有法线。 (在导出之前我已经选择了正确的网格。)

所以,我不明白为什么不为类型粒子的网格导出法线属性。

这是我的头发颗粒的一般 Blender 渲染图。如您所见,所有粒子都会与光发生反应。所以 Blender 使用这些粒子的法线属性。

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

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

提前感谢您的帮助。

【问题讨论】:

  • 这种情况下的粒子是用点来描述的吗?如果是这样,他们为什么会有法线?
  • 是的,我已经看到了这个页面,我的头发颗粒已经转换成 OBJ 文件,但没有法线信息。我的粒子,是用线条来描述的(一根头发是由几条细线组成的)。所以我认为有可能有法线属性(我相信一条线(GL_LINES)是一个小多边形,OpenGL中的所有多边形都应该有法线属性)。你怎么看我的观点?谢谢
  • 啊,错过了关于头发的部分。我猜这是在 Blender 中的一个很好的理由,我在下面的回答中解释了更多(它不想放在评论中:))

标签: graphics 3d blender wavefront


【解决方案1】:

您正在尝试为线条赋予法线。让我们想想这意味着什么。

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

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

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

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

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

【讨论】:

  • 这个答案的坦克。正如你在上面看到的那样,Blender 使用法线来显示它的粒子,因为当我移动我的模型时,所有的头发都会对光属性产生反应。因此,Blender 导出脚本可能不包括粒子导出的法线属性。此外,如果我在我的 openGL 程序中使用 glLineWith(10.0) 方法,您会看到线条看起来像平面(所以线条是多边形)所以在这种情况下,我当然会计算它们。但是你已经用 Blender 来做这种工作了吗?
  • 要照亮头发,您需要法线与您正在照明的线段和光线在同一平面上。几乎在所有情况下都有这样的正常现象。然后您可以正常点亮。但是,这会根据您的头发位置、灯光位置等而变化,因此您不能直接将其存储在 .obj 中。
  • 好的,我要计算我自己的法线。感谢您的回答。
  • 您需要为每个灯光为每个相机位置计算它们。一种常见的 OpenGL 方法是上传线段的向量并在顶点着色器中计算法线。 (ps如果我的回答解决了你的问题,请“接受”它:))
猜你喜欢
  • 2015-02-12
  • 1970-01-01
  • 1970-01-01
  • 2016-04-30
  • 2014-09-25
  • 1970-01-01
  • 2014-05-27
  • 2022-01-15
  • 1970-01-01
相关资源
最近更新 更多