2014-03-12 110 views
0

我畫使用OpenGL了一圈,與組調用是的:的OpenGL - 圈未被繪製光滑

float delta_theta = 0.001; 
glBegin(GL_POLYGON); // OR GL_LINE_LOOP 


glEnable(GL_LINE_SMOOTH); 
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); 
glEnable(GL_BLEND); 
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 


for (angle = 0; angle < 2*3.1415; angle += delta_theta) 
    glVertex3f(radius*cos(angle), radius*sin(angle), 0); 

glEnd(); 

的問題是,圈子並不順利。我正沿着軸移動(翻譯)圓圈;在某些點它變得平滑,但大多數情況下,它就像一個污點,請參閱附件截圖。

對於我能做些什麼來平滑圈子有什麼建議嗎? Nonsmooth circle

+2

避免使用幾何圖形繪製小形狀。代替大量的三角形,只需使用兩個三角形(製作一個正方形),然後使用紋理或片段着色器繪製圓。如果你的圓圈足夠小,你也可以使用'GL_POINT_SMOOTH'。 –

回答

2

我建議你不要嘗試用線條或填充多邊形來實現這一點。

使用單個GL_POINT並啓用GL_POINT_SMOOTH。這會將點光柵化爲實心圓而不是正常方形。如果您使用實現支持的抗鋸齒點(通常最多可以在NV實現上達到〜63.5,而在其他實現上更多),則效率會更高。

+0

謝謝。在使用GL_POINT和GL_POINT_SMOOTHING後,可以看到邊緣周圍的平滑效果。我接受了答案,但是有任何建議讓邊緣更清晰? – Iceman

+0

更清晰? 'GL_POINT_SMOOTH'是**應該**生成一個圓圈,其半徑由您的'glPointSize(...)'定義。製作一個圓圈更清晰對我來說沒有多大意義。你能指出我的圖表來說明你在說什麼嗎? –