大约6个月前,我开始制作3D图形引擎。它看起来已经很好。我已经实施了旋转,翻译,缩放,Z-buffer(画家的算法),... IM现在在镜面着色器上工作。为此,我需要某种方法来获得他的面孔的角度我的问题是,如何仅知道四个角落的位置才能获得飞机的角度?
这是我到目前为止得到的:
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;
}
空间中平面的方向由正常向量定义。为了获得此矢量,计算两个边的跨产品(属于平面)。因此,您在飞机上只需要三个非共线点。
n = (posB - posA) x (posC - posA) //cross product of two vectors
请注意,归一化(单位)正常向量的组件是方向余弦