OpenGL中線框圖的消隱

隱藏線消除
使用深度緩存的2通道繪製的OpenGL實現:
1. 禁寫顏色緩存
    glColorMask(0, 0, 0, 0);
2. 啓用深度測試
    glEnable(GL_DEPTH_TEST);
    glDepthFunc (GL_LESS);
3. 以多邊形填充模式繪製對象,要使用多邊形偏移(Pass1)
    glPolygonMode (GL_FRONT_AND_BACK, GL_FILL);
    glPolygonOffset(1.1f, 4.0f);
    glEnable (GL_POLYGON_OFFSET_FILL);  //啓用多邊形偏移
    drawScene ();
    glDisable (GL_POLYGON_OFFSET_FILL);
4. 啓用顏色緩存
    glColorMask(1, 1, 1, 1);
5. 採用兩種線繪製方式之一繪製對象中包含的線段(Pass2).

具體實現代碼

int DrawGLScene(GLvoid)        // 從這裏開始進行所有的繪製
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清除屏幕及深度緩存
    glLoadIdentity();     // 重置模型觀察矩陣
    glTranslatef(0.0f,0.0f,-5.0f);      // 移入屏幕 5 個單位
    static float xrot=0.0f,yrot=0.0f,zrot=0.0f;
    glRotatef(xrot,1.0f,0.0f,0.0f);      // 繞X軸旋轉
    glRotatef(yrot,0.0f,1.0f,0.0f);      // 繞Y軸旋轉
    glRotatef(zrot,0.0f,0.0f,1.0f);      // 繞Z軸旋轉
   
    glDisable(GL_TEXTURE_2D);
   
    glColorMask(0,0,0,0);
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LESS);
    glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
    glPolygonOffset(1.1f, 4.0f);
    glEnable (GL_POLYGON_OFFSET_FILL);  //啓用多邊形偏移
    //auxSolidSphere(1.0);
    auxSolidTeapot(1.0);
    glDisable (GL_POLYGON_OFFSET_FILL);
    glColorMask(1, 1, 1, 1);
    glPolygonMode (GL_FRONT_AND_BACK, GL_LINE);
    //auxSolidSphere(1.0);
    auxSolidTeapot(1.0);
   
    xrot+=1.3f;        // X 軸旋轉
    yrot+=1.2f;        // Y 軸旋轉
    zrot+=1.4f;        // Z 軸旋轉
    return TRUE;       //  一切 OK
}


效果圖:

發佈了61 篇原創文章 · 獲贊 3 · 訪問量 41萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章