没有glBegin的OpenGL绘图圆/椭圆(填充)?

时间:2015-05-13 04:38:20

标签: c++ opengl

我正在尝试使用OpenGL绘制一个Ellipse并将纹理映射到它。我不想使用glBegin(...)或glVertex4f,因为它们已被弃用。我得到了椭圆来显示纹理,但只有当我使用GL_LINE_LOOP时。这不允许我用纹理填充椭圆。我曾尝试使用GL_TRIANGLE_STRIP,希望这会填充Ellipse,但似乎不会渲染任何东西。

void Ellipse::makeEllipse(float radiusX, float radiusY)
{
  for(int i=0; i < 360; i++)
  {
    float rad = i*DEG2RAD;
    ellipse_vertices[i] = vec4(cos(rad)*radiusX,
               sin(rad)*radiusY,0,1);
   }
}
.
.
.
glDrawArrays (GL_TRIANGLE_STRIP, 0, numEllipsisVertices);

我试图找到解决方案,但只有使用GLBegin和glVertex的弃用示例。

1 个答案:

答案 0 :(得分:0)

GL_TRIANGLE_STRIP可能不是您要用于椭圆的绘图模式。但GL_TRIANGLE_FAN应该可以很好地工作。我建议你用中心顶点开始椭圆以简化几何:

void Ellipse::makeEllipse(float radiusX, float radiusY)
{
  ellipse_vertices[0] = vec4(0,0,0,1);
  for(int i=1; i < numEllipseVertices; i++)
  {
    float rad = i*DEG2RAD;
    ellipse_vertices[i] = vec4(cos(rad)*radiusX,
               sin(rad)*radiusY,0,1);
   }
}
.
.
.
glDrawArrays (GL_TRIANGLE_STRIP, 0, numEllipseVertices);

小语言提示:"ellipsis""ellipse"