如何使用4个角的位置获得3d平面的角度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用4个角的位置获得3d平面的角度相关的知识,希望对你有一定的参考价值。

大约6个月前,我开始制作一个3D图形引擎。它已经看起来非常好了。我已经实现了旋转,平移,缩放,Z-buffer(画家的算法),...我现在正在研究一个镜面着色器。为此,我需要一些方法来获得他个人面孔的角度我的问题是,如何通过只知道四个角的位置来获得平面的角度?

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

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

以上是关于如何使用4个角的位置获得3d平面的角度的主要内容,如果未能解决你的问题,请参考以下文章

U3D 如何计算一个UI四个角的绝对坐标

unity3d 获取相机视口四个角的坐标

css圆角矩形的实现有多种方法,本例的方法是根据四个角的位置,将矩形横向上分为上

计算给定 3 个点及其相对位置的平面的 3D 旋转

如何在没有地图视图的情况下在自定义图像上显示用户位置

片段着色器究竟如何用于纹理?