我怎樣才能做一個Z緩衝區與OpenGL的預備。前Z緩衝區通過OpenGL?
心中已經試過這樣:
glcolormask(0,0,0,0); //disable color buffer
//draw scene
glcolormask(1,1,1,1); //reenable color buffer
//draw scene
//flip buffers
但它不工作。這樣做後我什麼也沒有看到。有什麼更好的方法來做到這一點?
感謝
我怎樣才能做一個Z緩衝區與OpenGL的預備。前Z緩衝區通過OpenGL?
心中已經試過這樣:
glcolormask(0,0,0,0); //disable color buffer
//draw scene
glcolormask(1,1,1,1); //reenable color buffer
//draw scene
//flip buffers
但它不工作。這樣做後我什麼也沒有看到。有什麼更好的方法來做到這一點?
感謝
// clear everything
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// z-prepass
glEnable(GL_DEPTH_TEST); // We want depth test !
glDepthFunc(GL_LESS); // We want to get the nearest pixels
glcolormask(0,0,0,0); // Disable color, it's useless, we only want depth.
glDepthMask(GL_TRUE); // Ask z writing
draw()
// real render
glEnable(GL_DEPTH_TEST); // We still want depth test
glDepthFunc(GL_LEQUAL); // EQUAL should work, too. (Only draw pixels if they are the closest ones)
glcolormask(1,1,1,1); // We want color this time
glDepthMask(GL_FALSE); // Writing the z component is useless now, we already have it
draw();
如果我得到你的權利,你試圖通過禁用OpenGL的執行,以確定剔除深度測試。你在這裏使用顏色功能,這對我沒有意義。我認爲您正在嘗試執行以下操作:
glDisable(GL_DEPTH_TEST); // disable z-buffer
// draw scene
glEnable(GL_DEPTH_TEST); // enable z-buffer
// draw scene
// flip buffers
不要忘記在每次傳遞開始時清除深度緩衝區。
你正在用glColorMask做正確的事情。
但是,如果您沒有看到任何內容,可能是因爲您使用了錯誤的深度測試功能。 您需要GL_LEQUAL,而不是GL_LESS(這恰好是默認設置)。
glDepthFunc(GL_LEQUAL);
你是想用只固定管線做到這一點?使用着色器可能會更容易一些。 – 2010-09-13 17:57:29