javascript - 如何使用 4 个 Angular 的位置获取 3d 平面的 Angular

标签 javascript math graphics 3d trigonometry

大约 6 个月前,我开始制作 3D 图形引擎。 它看起来已经非常好了。我已经实现了旋转、平移、缩放、Z 缓冲区(画家算法)……我现在正在研究镜面着色器。为此,我需要某种方法来获取各个面孔的 Angular 我的问题是,如何仅知道四个 Angular 的位置来获得平面的 Angular ?

这是我到目前为止得到的:

function faceAngle(verts,faces){
    var arr = [];
    for(var i=0;i<faces.length;i++){
    var posA = verts[faces[i][0]];//the four corners
    var posB = verts[faces[i][1]];//    A       B
    var posC = verts[faces[i][2]];//      -----
    var posD = verts[faces[i][3]];//     |     |
                                  //     |     |
    var ar = [];                  //      -----
    ar.push(/*some Maths*/);//x   //    D       C
    ar.push(/*some Maths*/);//y
    ar.push(/*some Maths*/);//z
    arr.push(ar);
    }
    return arr;
}

最佳答案

空间中平面的方向由法向量定义。要获得此向量,请计算 cross product of two edges (属于飞机)。因此,您只需要平面上的三个非共线点。

n = (posB - posA) x (posC - posA)   //cross product of two vectors

请注意,归一化(单位)法向量的分量为 direction cosines

关于javascript - 如何使用 4 个 Angular 的位置获取 3d 平面的 Angular ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47994531/

相关文章:

javascript - 我在哪里可以找到一个易于使用的 Lightbox for ExtJS 4?

javascript - alert 和 window.alert 有什么区别?

javascript - 如何将数字的值增加到 10、100、1000、10,000 等的下一个倍数

c - 为什么 int * float 比 int/int 快?

javascript - Javascript 中 float 的精度可以成为非确定性的来源吗?

qt - 如何为图形 GUI 中显示的项目创建炫酷的 "mirror"效果?

javascript - 页面加载后如何删除或隐藏div

javascript - 如何通过在textarea中当前行末尾按空格键转到下一行

java - 如何将波形(用正弦波制成)从图片顶部移动到底部?

java - graphics.setColor(颜色);不工作