【发布时间】:2011-06-05 18:40:42
【问题描述】:
我正在读取提供法线的 Wavefront .obj 文件。我希望手动计算正切。
有什么方法可以检索到创建法线向量的 edge1 和 edge2?
【问题讨论】:
我正在读取提供法线的 Wavefront .obj 文件。我希望手动计算正切。
有什么方法可以检索到创建法线向量的 edge1 和 edge2?
【问题讨论】:
如果您只有一个法线向量,则您的两条垂直边有无数种选择 - 任何向量组合,其叉积为您提供该法线向量。
您需要通过决定您希望切线向量的方向来限制您的问题。这个http://support.microsoft.com/kb/131130 可能会帮助您原路返回。高温,
【讨论】:
有关切线和双切线的介绍,请参见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;
normal 是这些边的叉积:
vec3 normal = cross(edge1,edge2); // order important too
normalize(normal);
【讨论】: