0
的我有2個trinagles與座標:理解Z軸
static float squareCoords[] = {
// red triangle
0.0f, 0.0f, 0.5f,
0.25f, 0.5f, 0.5f,
0.5f, 0.0f, 0.5f,
//black triangle
-0.1f, -0.1f, 0.1f,
0.15f, 0.4f, 0.1f,
0.4f, -0.1f, 0.1f,
};
描繪順序:
private short drawOrder[] = {
0, 2, 1,
3, 5, 4,
};
然後我與glDrawElements繪製它和黑三角是總是在紅色前面。改變Z座標沒有結果。看起來像是第二個黑色Tringle,這就是爲什麼它總是在前面。幫助我理解發生了什麼以及哪裏是問題。
沒有投影矩陣,GL_DEPTH_TEST幫助。因此,如果GL_DEPTH_TEST或Projection矩陣未設置,OpenGL只是通過忽略z座標的順序繪製元素? – Faceles 2013-05-05 18:58:36
是的;如果沒有深度測試,對象將按照提交順序對幀緩衝區作出貢獻,新的東西會覆蓋舊的東西。投影矩陣(在固定功能流水線中)或着色器的動作(在可編程流水線中;通常投影矩陣的概念仍然保留,只是烘焙到着色器中)定義哪個輸入座標產生哪個輸出座標。在啓用GL_DEPTH_TEST的情況下,到輸出/ NDC空間的轉換可能導致事物「足夠接近」以進行z對戰或排序與您預期的不同。 – leander 2013-05-05 19:04:06
通過深度測試,根據您使用的深度函數('glDepthFunc'),較新的對象或者以每個片段爲基礎對幀緩衝區作出貢獻。所以默認的深度函數 - GL_LESS' - 「如果傳入的深度值小於存儲的深度值,則通過」。這是在轉換之後 - 如果您在世界座標中向下看-Z軸,這意味着*更大的* z值將在前面。另見'gluLookAt'等=) – leander 2013-05-05 19:10:44