【问题标题】:opengl regular polygonopengl 正多边形
【发布时间】:2011-06-02 16:18:47
【问题描述】:

我有以下代码,它什么也没画。 如果我使用 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();
} 

有什么建议吗?

编辑----------

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();

我把它弄乱了循环。

【问题讨论】:

  • 那个标题,请改回来
  • @Christian Rau:我现在看到了你的答案。它说 7 分钟前回答,我在 9 分钟前编辑。这一定是我编辑的时间。至于标题,我打算编辑评论。我会改回来的。但是因为你的答案和我的一样,我会接受它。但我真的没有看到你的答案

标签: opengl polygon


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      当您使用 GL_POLYGON 调用 glBegin 时,它期望我相信至少三个顶点。标准绘图协议是使用三角形绘制,三个一组的女巫顶点,因为每个三角形面需要三个顶点。你只喂它一个顶点,所以你什么也看不到。尝试将其更改为:

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

      【讨论】:

        猜你喜欢
        • 2011-04-11
        • 2012-03-09
        • 1970-01-01
        • 1970-01-01
        • 2018-09-29
        • 2020-02-17
        • 2023-03-27
        • 2011-08-16
        • 1970-01-01
        相关资源
        最近更新 更多