2017-12-27 382 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