0
我在寫代碼,顯示對象的隱藏部分。 這裏是例子:板是較大的多邊形物體,圓柱體是較小的多邊形物體。圓柱被盤子隱藏起來。 (參見下半部窗口:氣缸穿透板的汽缸的某些部分是由板隱藏。) 的圖像由下面碼。的OpenGL glDepthFunc不起作用
- 拉伸板(未它繪製到RGB緩衝器僅捕捉深度值。)
- 繪製氣缸(如果深度測試「少」穿過:這意味着所述氣缸(更小的深度的可見部分)被繪製)
該模型是沿着每個幀y軸旋轉。它給了我每一幀的正確結果。現在
,我想顯示在氣缸作爲透明的隱藏部分。 在使用混合之前,我只想顯示圓柱體的隱藏部分。也就是說,我必須顯示具有比板深度更大的深度值的柱面區域。然後,我只是改變
glDepthFunc(GL_LESS);
到
glDepthFunc(GL_GREATER);
但是,如果我把它改爲GL_GREATER,它並沒有給我一個正確的結果。 我在第一幀得到了正確的結果,但之後,模型消失了。 (這意味着,模型不顯示在窗口上,下視口) 我無法理解原因。幫我!
void MyDisplay()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glRotatef(rot, 0, 1, 0);
glViewport(0,0, width, height/2);
glEnable(GL_DEPTH_TEST);
DrawPlate();
glColor4f(0,0,0,1);
DrawCylinder();
glDisable(GL_DEPTH_TEST);
glViewport(0,height/2, width, height/2);
glEnable(GL_DEPTH_TEST);
glClearDepth(1.0);
//glDrawBuffer(GL_NONE); // No color buffers are written
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
DrawPlate();
glDepthFunc(GL_LESS);
// glDepthFunc(GL_GREATER); // doesn't work !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glColor4f(0,0,0,0.5f);
DrawCylinder();
delay(1);
glFlush();
glutPostRedisplay();
}
如果清除深度爲1.0,然後只像素渲染深度大於當前深度值越大,你不能指望得出任何東西。 –
此外,真正改變的深度清算價值,你需要調用'glClearDepth()調用''之前glClear()'。 –
我猜cleardepth(1.0)不是我必須改變的原因。從代碼中清除深度1.0 - >繪製對象(改變深度) - >深度測試過程並不奇怪。 (實際上1.0是原始的初始深度值。擦除cleardepth(1.0)行不會給我任何改變。 – Wooni