opengl正多边形

时间:2011-06-02 16:18:48

标签: opengl polygon

我有以下代码,什么都没有。 如果我使用glBegin(GL_POINTS)它会绘制一个圆,但是使用多边形模式则不会。

int WXSIZE=500,WYSIZE=500;

//Coordinate system
float Xmin=-8, Xmax=8, Ymin=-8, Ymax=8;

void setupmywindow()
{
    glClearColor(0,0,0,0);  
    gluOrtho2D(Xmin, Xmax, Ymin, Ymax);
}


void mypolygon(float radius) //test object
{

   glColor3f(1,0,0);
   int numPoints=20;
   float x,y;
   float centerx,centery=0;

    for (int i = 0; i < numPoints; i++)
{
    x = centerx + radius * sin(2.0*PI*i/numPoints);
    y = centery + radius * cos(2.0*PI*i/numPoints);

     glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
     glBegin(GL_POLYGON);
     glVertex2f(x, y);
     glEnd();

}

}


void myDisplay()
//single object
{
    glClear(GL_COLOR_BUFFER_BIT);
    mypolygon(2.0);
    glutSwapBuffers();
}


int main(int argc, char **argv)
{

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
    glutInitWindowSize(WXSIZE,WYSIZE);
    glutCreateWindow("My graphic window");
    setupmywindow();
    glutDisplayFunc(myDisplay);
    glutMainLoop();
} 

有什么建议吗?

EDIT ----------------------

glBegin(GL_POLYGON);

    for (int i = 0; i < numPoints; i++)
{
    x = centerx + radius * sin(2.0*PI*i/numPoints);
    y = centery + radius * cos(2.0*PI*i/numPoints);

    glVertex2f(x, y);

}
   glEnd();

我把它搞砸了。

3 个答案:

答案 0 :(得分:4)

在每个循环中,您绘制的是一个多边形,它由一个顶点组成,所以没有。只需将glBegin/glEnd(和glPolygonMode)放在for循环之外,只在循环中绘制glVertex。当然它适用于点,因为单个点的n次与n个点相同。但是由一个点组成的n个多边形与由n个点组成的一个多边形不同。

答案 1 :(得分:3)

你的多边形似乎是错误的一面。默认情况下,OpenGL仅显示正面,需要逆时针指定。你可以:

  • 反转基元的顺序(for (int i = numPoints-1; i >= 0 ; i--)
  • 反转正面(glFrontFace(GL_CW)
  • 禁用背面剔除(glDisable(GL_CULL_FACE))。

答案 2 :(得分:0)

当你用GL_POLYGON调用glBegin时,我相信至少有三个顶点。标准绘图协议是使用三角形绘制三角形,因为每个三角形面需要三个顶点。你只是给它一个顶点,所以你不会看到任何东西。尝试将其更改为:

glBegin(GL_TRIANGLES);
glVertex2f(x1, y1);
glVertex2f(x2, y2);
glVertex2f(x3, y3);
glEnd();