我有以下代码,什么都没有。 如果我使用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();
我把它搞砸了。
答案 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();