我试图通过3点计算法线向量, 从它们获得2个向量并计算法线。 但我需要知道正常情况是正面还是负面。 请帮助:)计算矢量符号(正/负)
0
A
回答
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));
0
指向只是法线矢量的计算告诉你什么。
首先,您需要知道网格面的定义方式。无论它是由三角形还是四边形组成,都必须确保您有正确的顶点顺序 - 逆时针或顺时针旋转(请参阅this以查看OpenGL中的顺时针面。顺序决定了脸部的哪一面是可见的(可以受到光的属性的影响),而不是。
之后,你需要计算你的direction vector of camera和这个法线向量的点积。根据顶点的顺序,您将得到负面或正面的结果。
相关问题
- 1. 如何计算3D矢量与给定轴正常的2个矢量之间的符号夹角?
- 2. 运动矢量计算
- 3. R:计算两个矢量
- 4. 矢量计算在LISP
- 5. 计算中间矢量角
- 6. numpy的计算矢量
- 7. 计算矢量的导数
- 8. Python库来计算矢量
- 9. 矢量的符号函数
- 10. 从at和眼睛矢量计算正确,向上和查看矢量?
- 11. 计算在GLSL矢量的发散(或矢量的梯度)
- 12. 开放式办公公式:计算正负号相同列
- 13. R中的矢量化计算
- 14. 计算二维矢量的偏航
- 15. 来计算矢量误差更快地
- 16. 推力矢量距离计算
- 17. Python矢量计算器(数学导入)
- 18. 矢量化日期数组计算
- 19. 计算图像的梯度矢量场
- 20. 计算一对矢量的最小值
- 21. 如何计算矢量领先0
- 22. Matlab计算矢量的反射
- 23. 计算X ^与GCC矢量内在Ÿ
- 24. 统一视线矢量计算
- 25. 矢量的代码来计算总和
- 26. 计算单位梯度矢量
- 27. 计算GLSL中的矢量交点(OpenGL)
- 28. 计算二维矢量的交叉积
- 29. 大型矢量距离计算[性能]
- 30. 计算后续机型的矢量