簡體   English   中英

有人可以解釋一下此代碼中的法線是如何計算的嗎?

[英]Can someone explain how are normals calculated in this code?

我正在用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;
}

除了最后三行,我幾乎了解所有內容。 我只是...無法弄清楚它的工作方式和原因。

有人可以解釋它的計算方式嗎?

正如Cyber​​在評論中所說,解決方案正在計算叉積。 這里描述數學。

該代碼將三角形點變成2個向量(從點1到2,從點1到3),然后將它們取下來並計算它們的叉積。

這是一個交叉產品。 請注意,當向量(I,j,k)與(i0,j0,k0)相乘(叉積)時,結果為(jk0-kj0,ki0-ik0,ij0-ji0)通常法線也應歸一化向量不是單位長度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM