2012-07-11 82 views
0

如果我繪製一個gluCylinder,頂部有gluDisk。如果不啓用剔除功能,我可以獲得期望的帶蓋效果的圓筒。但是,如果我啓用剔除,磁盤(又名蓋)消失。 這是爲什麼?這是主要問題。另外,在啓用剔除功能後,圓柱體的背面也不會被繪製。我明白爲什麼會發生這種情況,但我仍然希望看到圓柱體的內部。代碼是:查看圓柱體內部

glPushMatrix() 
    quadratic = gluNewQuadric() 
    gluQuadricNormals(quadratic, GLU_SMOOTH) 
    gluQuadricTexture(quadratic, GL_TRUE) 
    glRotatef(90, 1, 0, 0) 
    glTranslate(0, 0, -3*sz) 
    gluCylinder(quadratic, 0.75*sz, 0.75*sz, 3.0*sz, 32, 32) 
    gluDisk(quadratic, 0.0, 0.75*sz, 32, 32) 
    glPopMatrix() 
+1

這裏的問題究竟是什麼?您啓用剔除併發生預期效果(刪除背面)。如果你想看到你的圓筒內部,爲什麼不再次禁用剔除?或者我誤解了你? – kroneml 2012-07-11 09:35:15

+0

我寧願剔除啓用渲染速度。大多數情況下,主要問題是*爲什麼磁盤在啓用剔除後消失*。編輯的問題。 – Sardathrion 2012-07-11 09:40:46

回答

4

您的磁盤面朝錯誤的方向(錯誤的繞組)。因此,它被淘汰。你可以嘗試使用gluQuadricOrientation來改變其方向,這應該可以做到。有關更多信息,請參閱OpenGL規範gluDiskglCullFace

2

磁盤只是一個沒有任何厚度的平面。所以一面是正面,另一面是背面,並通過剔除使其中一個被剔除。你可能只是看到了被剔除的一面。如果這不是您想要看到的一面,只需旋轉磁盤即可。沒有什麼奇怪的。因此,只需將其包裝成:

glPushMatrix(); 
glRotatef(180.0f, 0.0f, 1.0f, 0.0f); 
gluDisk(quadratic, 0.0, 0.75*sz, 32, 32); 
glPopMatrix(); 

或者像kroneml所示,改變其三角形的方向。自己決定哪一個在你的情況下更符合概念。

+0

我認爲'glPush/PopMatrix'和'glRotate'的組合應該比改變磁盤方向的效率要低一些(對於這個小例子來說並不重要)。但是,這當然是解決這個問題的有效方法! – kroneml 2012-07-11 10:17:56

+0

@kroneml是的。改變方向直到我讀到你的答案(沒有使用GLU quadrics的年齡,像所有人都應該),所以我只是讓它作爲替代方案。由於他使用GLU quadrics和固定功能矩陣堆棧,所以無論如何,性能並不是一種選擇,但是你可能是正確的,方向改變應該是免費的。 – 2012-07-11 10:49:43