2013-11-27 33 views
0

DirectX如何確定多邊形卷繞順序?我很好奇背面撲殺。從研究中我看到它建議DX計算一個曲面法線,並將該點和相機向量的點積乘積,如果大於0則剔除。DirectX如何確定纏繞順序?

首先,這是DirectX實際使用的技術嗎?其次,如果是這樣的話,考慮到每個表面有兩個法線 - 一個與另一個表面相對 - DirectX如何知道使用哪個法線?

回答

4

否,這不是所使用的技術,既不OpenGL或DirectX具有攝像機視圖向量的概念。會發生什麼是頂點被轉換爲標準化的設備座標空間(通過首先讓用戶轉換爲在頂點着色器中後投影空間並隨後將xyz分量除以w)。在該座標系中,我們可以使用頂點的x和y分量來計算三角形的「有符號區域」。

float signedArea = 0; 
    for(int k = 1; k < output->count; k++) { 
     signedArea += (output->vertices[k - 1].values[0] * output->vertices[k - 0].values[1]); 
     signedArea -= (output->vertices[k - 0].values[0] * output->vertices[k - 1].values[1]); 
    } 

根據頂點是按時鐘方式還是逆時鐘方式進行評估,這些給出了正面或負面區域。從背後看一個三角形,會使正片區域變成負片,反之亦然。這個值隨後用於確定是否柵格化正面,背面或背面三角形。