2017-12-27 353 views
0

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

这是我走到这一步:在空天飞机的

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; 
} 
+0

角...平面之间有什么? – MBo

回答

2

方向由法线定义。为了得到这个矢量,计算cross product of two edges(属于飞机)。所以你在飞机上只需要三个非共线点。

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

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

+0

对不起,我对这个话题很不了解。但是,我如何使用法向量来计算平面的方向?我是否必须使用勾股定理来计算面的中心与法向量和3个轴之间的直线的角度?因为我想用弧度返回角度。 –

+0

@DylanMissuwe平面*的方向是*法向量;但如果您想将其转换为球形极角,请参阅[此处](https://en.wikipedia.org/wiki/Vector_fields_in_cylindrical_and_spherical_coordinates#Vector_fields)。 – meowgoesthedog

+0

@Dylan Missuwe这就是为什么我问 - 你的意思是什么角度。法向量是方向的最佳表征。所有其他参数可能从正常推导 – MBo