2015-11-14 38 views
1

我正在使用z緩衝區來渲染我的3D三角網格。但是,當我將模型渲染爲線框網格時,我還看到了應該被前臉隱藏的三角形面。所以,我用背面剔除如下:線環的背面剔除

  glEnable(GL_CULL_FACE); 
      glCullFace(GL_BACK); 
      drawWireFrame(); 
      glDisable(GL_CULL_FACE); 

的drawWireFrame功能如下:

void drawWireFrame() 
{ 
    int i, j; 
    glColor3d(1., 0., 0.); 

    HE_edge *curr; 

    for (int i = 0; i < he_f_count; i++) 
    { 
     glBegin(GL_LINE_LOOP); 
     curr = m_HE_face[i].edge; 
     glNormal3f(curr->prev->vert->vnx, curr->prev->vert->vny, curr->prev->vert->vnz); 
     glVertex3f(curr->prev->vert->x, curr->prev->vert->y, curr->prev->vert->z); 
     glNormal3f(curr->vert->vnx, curr->vert->vny, curr->vert->vnz); 
     glVertex3f(curr->vert->x, curr->vert->y, curr->vert->z); 
     glNormal3f(curr->next->vert->vnx, curr->next->vert->vny, curr->next->vert->vnz); 
     glVertex3f(curr->next->vert->x, curr->next->vert->y, curr->next->vert->z); 
     glEnd(); 
    } 

} 

不過,我仍然得到同樣的結果,我加入背面剔除之前拿到。你能幫我確定我在這裏錯過了什麼嗎?

謝謝。

回答

1

線條沒有正面和背面 - 線條根本沒有面。背面剔除僅適用於定義面部的基本類型,即三角形(以及帶狀和扇形的基本單元),對於不推薦的GL,也可使用基於四邊形的原始和多邊形。

如果您想要這些圖元的線框圖,可以直接將它們繪製爲三角形(或其他類型)並設置爲獲得線框可視化。在這種情況下,背面剔除會產生預期的效果。另請注意,設置glPolygonMode就足夠了,因此線框和實體渲染不需要不同的繪製方法。

+0

非常感謝您的快速響應! glPolygonMode()完全解決了我的問題!儘管如此,我仍然必須明確地啓用背面剔除才能進行撲殺。我學到了一些新東西。再次感謝:) – wateva

+0

那麼,你當然必須啓用'GL_CULL_FACE'面部剔除工作... :) – derhass

+0

@wateva:順便說一句,你可以標記答案爲「接受」。這是該網站是如何[應該工作](http://stackoverflow.com/tour)... – derhass