2011-06-05 55 views
0

我正在读取提供法线的Wavefront .obj文件。我希望手动计算切线。从正常矢量中检索边缘

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

回答

3

如果你有一个单一的法线向量,你的两个垂直边的选择是无限的 - 任何一个向量的叉积可以给出法向量。

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

+0

是的,我知道那个,但是因为法线被表示为一个归一化的向量。基本上只有1个边缘组合可以提供正常的边缘。这就是我试图检索。 – McBob 2011-06-05 23:23:56

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);