2013-11-26 55 views
-1

這裏是繪製原始缸代碼:頂點重疊在OpenGL

glBegin(GL_TRIANGLE_FAN); 
glVertex3f(0, height/2.0f, 0); 
for (int i = 0; i < SIDENUMS +1; i++) 
{ 
    glVertex3f(radius * cos(i * 2 * PI/SIDENUMS), height/2.0f, radius * sin(i * 2 * PI/SIDENUMS)); 
} 
glEnd(); 

glBegin(GL_QUADS); 
for (int i = 0; i < SIDENUMS + 1;i++) 
{ 
    glVertex3f(radius * cos(i * 2 * PI/SIDENUMS), height/2.0f, radius * sin(i * 2 * PI/SIDENUMS)); 
    glVertex3f(radius * cos(i * 2 * PI/SIDENUMS), -height/2.0f, radius * sin(i * 2 * PI/SIDENUMS)); 
    glVertex3f(radius * cos((i+1) * 2 * PI/SIDENUMS), -height/2.0f, radius * sin((i+1) * 2 * PI/SIDENUMS)); 
    glVertex3f(radius * cos((i+1) * 2 * PI/SIDENUMS), height/2.0f, radius * sin((i+1) * 2 * PI/SIDENUMS));  
} 
glEnd(); 

glBegin(GL_TRIANGLE_FAN); 
glVertex3f(0, -height/2.0f, 0); 
for (int i = 0; i < SIDENUMS + 1; i++) 
{ 
    glVertex3f(radius * cos(i * 2 * PI/SIDENUMS), -height/2.0f, radius * sin(i * 2 * PI/SIDENUMS)); 
} 
glEnd(); 

和輸出低於什麼樣圖像:

enter image description here

現在圖片,請注意點答:

這一點已經繪製了兩次,一個在TRIANGLE_FAN中,第二個在GL_QUADS中,我的問題是,這是兩個不同的點w自動互相取消做出一個點?或者他們在彼此之上?總結有多少點?一個或兩個 ?如果他們沒有互相焊接,我該如何解決?

回答

0

這兩個不同的點自動焊接到彼此做出一個點嗎?

沒有。

或者它們彼此重疊?

是的。

有多少點?一個或兩個 ?

兩個。

你必須融合頂點的客戶端,如果這對你很重要。 OpenGL中沒有神奇的合併。

+0

ü可以舉一個例子來融合和焊接他們!我如何繪製它們焊接? –

+1

@ S.A.Parkhid:這是什麼,OpenGL的確實OpenGL剛纔只制地圖的點,線和三角形到屏幕上,然後忘了他們是如何走過來的。在OpenGL中沒有像「場景」或模型那樣的東西。 「合併」或「融合」這些點將會發生在程序的數據結構中。然而,對於你的形狀表明它實際上使共享*頂點*沒有什麼意義,因爲*法線*繪製臉部的不同。 – datenwolf

+0

我認爲在這個圖中A點更像是三個頂點。有幾個四邊形在該位置有一個頂點,有幾個扇形三角形。扇形三角形重用一個頂點,但四邊形創建兩個不同的頂點。 –

0

創建三角形時,三角形基元重複使用「點」,但對於四邊形,每個調用glVertex3f (...)的點都會生成一個「點」。

換一種方式:

當您使用三角形扇,第一個三角形需要3個頂點進行改造,每個三角形之後只需要1個新的頂點(和重用2)。這會影響post-T&L cache效率,這是你最終在你的問題得到的概念。

當您使用頂點數組和glDrawElements (...)或共享頂點的原始模式(例如風扇和條)時,可以避免必須多次轉換同一個點。但是,如果您在示例中使用了更多的每個頂點屬性,則這可能不實用。也就是說,如果您正在繪製的對象的每個邊都有相同空間位置的一組不同的紋理座標或法線。