我正在阅读提供法线的Wavefront .obj文件。我希望手动计算切线。
有什么方法可以检索创建法线向量的edge1和edge2吗?
答案 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);