【问题标题】:Retrieve Edges from Normal Vector从法向量中检索边缘
【发布时间】:2011-06-05 18:40:42
【问题描述】:

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

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

【问题讨论】:

    标签: math 3d


    【解决方案1】:

    如果您只有一个法线向量,则您的两条垂直边有无数种选择 - 任何向量组合,其叉积为您提供该法线向量。

    您需要通过决定您希望切线向量的方向来限制您的问题。这个http://support.microsoft.com/kb/131130 可能会帮助您原路返回。高温,

    【讨论】:

    • 是的,我知道,但由于法线表示为标准化向量。基本上只有 1 种边缘组合可以提供正常值。这就是我试图检索的内容。
    【解决方案2】:

    有关切线和双切线的介绍,请参见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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-30
      • 2017-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-13
      相关资源
      最近更新 更多