我正在尝试将法线向量计算3个点, 从他们得到2个向量并计算正常值。 但我需要知道正常是正面还是负面。 请帮助:)
答案 0 :(得分:0)
法线是另一个向量,所以你可以说它有一个方向,一个值(或幅度或长度),但没有符号。
法线的方向取决于顺序,你传递的值。
我认为你要求剔除,另一个矢量会从脸部的正面还是背面看?那么你可以计算向量和正常的点积。
结果> 0他们指向同一个方向,
结果< 0他们指向相反的方向
function pt(x,y,z){ return { x: +x||0, y: +y||0, z: +z||0 } }
function dot(a,b){ return b.x*a.x + b.y*a.y + b.z-a.z }
function delta(a,b){ return pt(b.x-a.x, b.y-a.y, b.z-a.z) }
function cross(a,b){
return pt( a.y*b.z - a.z*b.y, a.z*b.x - a.x*b.z, a.x*b.y - a.y*b.x )
}
var face = [
pt(0,0,0),
pt(1,0,0),
pt(0,1,0)
];
var vector;
var normal = cross(
delta(face[0], face[1]),
delta(face[1], face[2])
);
console.log('normal', normal);
console.log(vector = pt(0, 0, 10), dot(normal,vector));
console.log(vector = pt(0, 0, -1), dot(normal,vector));
//pretty flat angle but still enough to determine the direction
console.log(vector = pt(1, 1, .00005), dot(normal,vector));
答案 1 :(得分:0)
只是正常向量的计算不会告诉你什么。
首先,您需要了解网格面的定义方式。无论它是由三角形还是四边形组成,你必须确保你有正确的顶点顺序 - 逆时针或顺时针(阅读this以查看OpenGL中的顺时针面)。该顺序决定了面部的哪一面是可见的(可能受光的属性影响),而不是。
之后,您需要计算direction vector of camera和此法线向量的点积。根据顶点的顺序,您将得到负面或正面结果。