OpenGL:找到一个顶点的正常单一向量

问题描述:

我有一个对象,我想应用照明。它在具有顶点坐标的文本文件中描述。OpenGL:找到一个顶点的正常单一向量

予读入了OpenGL OpenGL超级以下:

void m3dFindNormal(M3DVector3f vNormal, const M3DVector3f vP1, const M3DVector3f vP2, const M3DVector3f vP3); 

要使用此功能,它传递一个矢量 存储正常,三个矢量 (各只是三个浮点数的数组) 从您的多边形或三角形 (指定逆时针缠绕 的顺序)。请注意,此返回的正常 矢量不一定是单位长度 (正常化)。

我明白,在我经过的顶点(顺时针或逆时针)的顺序决定了法向矢量的方向,所以我不知道我怎样才能使与this format一个文件中的函数工作。

嗯,这种格式看起来有点像OBJ-ish,但是有颜色,没有法线和纹理坐标。看起来这不是一个很好的选择!但是,如果你真的想坚持下去......

我的建议没有。 0是:

严重地使用其他格式。 :)顶点的原始二进制转储(位置+法线+纹理坐标+颜色+无论),然后索引通常是最简单的解决方案。如果你真的 *真的*想要使用.off ...

我的建议没有。 1:

  • 将其导入到搅拌机(用Python编写进口商脚本或使用其他工具来改变格式)
  • 有搅拌机计算法线你(它会做得很好!),
  • 将其导出为任何带有法线的格式。

如果你不想(或不能)做任何理由,还有如何自己生成法线忠告没有2:

  • 每个面,计算它的临时脸部正常(对于脸部A,B,C,它是(B-A)x(C-B))。不要将其重新缩放到长度= 1 - 面部的面积越大,产生的法向矢量的时间就越长,这就是我们想要的(现在)。
  • 对于每个顶点,求和触及该向量的脸部的所有面部法线(这是每个脸部法线的非归一来得方便的地方 - 您会得到某种“脸部区域”的“加权和”作为重量)并且然后归一化所得的矢量。这是您可以使用的每个顶点法线的很好的近似值。
+0

我不能用另一种格式,这个学校里的功课。使用这种“加权总和”会带来什么好处? – andandandand 2010-11-22 17:40:54

尝试一下,顺序取决于创建.off文件的程序,格式描述似乎没有定义正常的方向。我只是将它们出现在索引列表中的顺序传递给函数。如果这不起作用,请以相反的顺序传递它们。