从法向量中检索边

时间:2011-06-05 18:40:43

标签: math 3d

我正在阅读提供法线的Wavefront .obj文件。我希望手动计算切线。

有什么方法可以检索创建法线向量的edge1和edge2吗?

2 个答案:

答案 0 :(得分:3)

如果你有一个法向量,那么你的两个垂直边有无穷多的选择 - 任何矢量的组合,它们的叉积给你正常的向量。

您需要通过决定切线向量的方向来约束您的问题。这http://support.microsoft.com/kb/131130可能会帮助您回溯原因。 HTH,

答案 1 :(得分:0)

请参阅http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-13-normal-mapping/以了解切线和比特数;它们也是您需要更多详细信息的底部的附加参考。

但是,你的问题是正常的。

OBJ是一种索引格式,其中一个位置为索引,一个(不同)为法线索引(依此类推所有属性)。

所以如果你有这样的一行:

f 0/10 1/11 2/12

,你有一个三角形的面(3个指数);位置索引是0,1,2(取决于你的obj文件,它在文件的标题中描述)。要获得位置,请为位置数组编制索引:

vec3 vertexPos1 = positions[0]; // or more generically, positions[faceIndices[i++]]
vec3 vertexPos2 = positions[1];
vec3 vertexPos2 = positions[2];

egdes是职位的增量:

vec3 edge1 = vertexPos2 - vertexPos1; // order is important
vec3 edge2 = vertexPos3 - vertexPos1;

正常是这些边缘的交叉积:

vec3 normal = cross(edge1,edge2); // order important too
normalize(normal);