绘制一个形状后,我无法在我的显示功能中绘制任何更多的形状。但它在其他方法中被完美绘制,但不是在我的glutidlefunction(myDispalay)中。在这里呆了两天左右。任何人都可以帮助我离开这里吗?opengl代码编译问题
下面是代码:
include < stdio.h>
include< math.h>
include < GL/glut.h>
define PI 3.1416
float x,y,r,y2,r2;
void drawCircle(float x, float y, float radius)
{
int i;
int triangleAmount = 1000; //# of triangles used to draw circle
float twicePi = 2.0f * PI;
glBegin(GL_TRIANGLE_FAN);
for(i = 0; i <= triangleAmount;i++)
{
glVertex2f(x + (radius * cos(i * twicePi/triangleAmount)),
y + (radius * sin(i * twicePi/triangleAmount)));
}
glEnd();
}
void drawthrower()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0,1.0,0.0);
drawCircle(x,y,r);
glBegin(GL_LINES);
glVertex2i(x-12,y-28);
glVertex2i(x-12,y-70);
glVertex2i(x+12,y-28);
glVertex2i(x+12,y-70);
glEnd();
drawCircle(x,y2,r2);
glutSwapBuffers();
}
void myDisplay()
{
while ((x+r)<=1024)
{
x+=8;
drawthrower();
}
while ((x-r)>=0)
{
x-=8;
drawthrower();
}
}
void myInit()
{
glClearColor(1,1,1,1);
x=50,y=693,r=30,x=50,y2=623,r2=12;
}
void reshape(int w, int h)
{
glViewport(0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 1024.0, 0.0, 768.0, 0.0, 1.0);
glMatrixMode(GL_MODELVIEW);
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(1024,768);
glutInitWindowPosition(0, 0);
glutCreateWindow("Graphics_Project");
myInit();
glutReshapeFunc(reshape);
glutIdleFunc(myDisplay);
glutMainLoop();
return 0;
}
您需要在主显示函数结束时每帧调用一次'glutSwapBuffers()'。 – 2015-04-03 19:50:08
在这段代码中,我画了一个阴影,并不断在可见范围内沿x轴移动对象。通过在主显示函数中最后调用一次glutSwapBuffers()并不能解决我的问题。它并没有在屏幕上画出任何新的形状,甚至停止了我刻意塑造的形状的运动。我也尝试过使用单个缓冲区,但它也提取相同的问题 – 2015-04-03 20:14:51