我正在用C++編寫3ds文件解析器。現在我工作的正常人,我發現這段代碼的某處網絡:有人可以解釋在這個代碼中法線是如何計算的?
void calculateNormals(vert a, vert b, vert c,GLfloat *nx,GLfloat *ny, GLfloat *nz){
GLfloat Qx, Qy, Qz, Px, Py, Pz;
GLfloat v1[3] = {a.x,a.y,a.z};
GLfloat v2[3] = {b.x,b.y,b.z};
GLfloat v3[3] = {c.x,c.y,c.z};
Qx = v2[0]-v1[0];
Qy = v2[1]-v1[1];
Qz = v2[2]-v1[2];
Px = v3[0]-v1[0];
Py = v3[1]-v1[1];
Pz = v3[2]-v1[2];
*nx = Py*Qz - Pz*Qy;
*ny = Pz*Qx - Px*Qz;
*nz = Px*Qy - Py*Qx;
}
我明白了幾乎一切,除了最後3行。我只是......無法弄清楚它的工作原理和原理。
有人可以解釋它是如何計算的?
您可以使用[跨產品(如此處所示)](https://math.stackexchange.com/questions/305642/how-to-find-surface-normal-of-a-triangle)計算法線, ,這基本上就是你的代碼在做什麼。 – CoryKramer
這是關於計算曲面法線的,你可以在https://www.opengl.org/wiki/Calculating_a_Surface_Normal中看到。 – user1929959
最後一行是計算[兩個3向量的交叉乘積](http://en.wikipedia.org/wiki/Cross_product)。關於法線的計算我把你的答案http://stackoverflow.com/a/6661242/524368 – datenwolf