2017-07-14 55 views
0

我正在开发一个应用程序,它使用OpenGL for Mac中的颜色深度选取选区。选择效果很好,但我观察到OpenGL没有绘制完美的圆圈(圆形)。我使用GL_LINE_LOOP呈现360个细分来完成一个关闭的循环。但是,如果在SELECTION模式下看到渲染,我会观察圆形图上的某种咬痕(白色三角形),每个圆圈总共有4个咬痕。OpenGL for OSX不完美的周期

是OpenGL问题还是我做错了什么?

这是绘制每个circunference的代码。 。

glLineWidth(10.0f); // Exaggerated for image. 
glBegin(GL_LINE_LOOP); 
    for (int i = 0; i <= 360; i++) { 

     calcX = radio * cos((i * M_PI)/180) + offset_x; 
     calcY = radio * sin((i * M_PI)/180) + offset_y; 
     glVertex3f(calcX, calcY, offset_z); 
    } 
glEnd(); 

Tree circunferences with bits

+0

它几乎看起来像是线的终点是这样... –

+1

图形硬件可以(并且)在渲染线条方面有所不同,特别是宽线。根据您的硬件,它可能会通过移动线条坐标来渲染多个单像素宽线来画线。您所展示的最佳方法可能是呈现椭圆形状的三角形条纹,其宽度与您所需的线条宽度相匹配。它也可能比宽线渲染速度更快(现代硬件更喜欢渲染三角形)。 – radical7

回答

0

谢谢“radical7,对于该建议使用三角形不是行我能够获得一个完美的戒指,工作顺利

这是代码:

 color = 0.00277778; 
     glBegin(GL_TRIANGLE_STRIP); 

     for (int i = 0; i <= 360; i++) { 

      glColor4f(color, 0, 0, 1.0f); 
      calcX = radio * cos((i * M_PI)/180) + offset_x; 
      calcY = radio * sin((i * M_PI)/180) + offset_y; 
      glVertex3f(calcX, calcY, offset_z); 
      radio +=20; 

      calcX = radio * cos((i * M_PI)/180) + offset_x; 
      calcY = radio * sin((i * M_PI)/180) + offset_y; 
      glVertex3f(calcX, calcY, offset_z); 
      radio -=20; 

      color += 0.00277778; 
     } 
     glEnd(); 

结果:

Perfect ring...