2014-03-12 80 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(...)'定义。制作一个圆圈更清晰对我来说没有多大意义。你能指出我的图表来说明你在说什么吗? –