首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计算向量符号(正/负)

计算向量符号(正/负)
EN

Stack Overflow用户
提问于 2016-02-06 21:17:58
回答 2查看 941关注 0票数 1

我试着用3个点计算一个法向量,从中得到2个向量,然后计算法线。但我需要知道常态是正数还是负数。请帮助:)

EN

回答 2

Stack Overflow用户

发布于 2016-02-06 22:31:45

法线是另一个向量,所以你可以说它有一个方向,一个值(或幅度或长度),但没有符号。

法线的方向取决于传递值的顺序。

我假设你是在请求剔除,是另一个向量从前面看还是从后面看脸?

结果<0它们指向相反的方向

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2016-02-07 07:06:27

只是法向量的计算不会告诉你任何事情。

首先,你需要知道网格的面是如何定义的。无论它是由三角形还是四边形组成的,你都必须确保顶点的顺序是正确的-逆时针还是顺时针(阅读this了解OpenGL中顺时针的面是什么)。顺序决定了面的哪一侧是可见的(可能受灯光属性的影响),以及哪一侧不可见。

然后你需要计算你的direction vector of camera和这个法向量的点积。根据顶点的顺序,您将获得负或正的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35241473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档