【发布时间】:2015-04-04 04:27:04
【问题描述】:
绘制形状后,我无法在我的显示功能中绘制更多形状。但它在其他方法中被完美绘制,但不是在我的 glutidlefunction(myDispalay) 中。在这里卡了大约两天。任何人都可以从这里帮助我吗?
代码如下:
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()。 -
在这段代码中,我画了一个可怜的对象,并在可见范围内沿 x 轴不断移动对象。通过在我的主显示功能最后调用一次 glutSwapBuffers() 并不能解决我的问题。它没有在屏幕上绘制任何新形状,甚至没有停止我之前绘制的形状的移动。我也尝试过使用单个缓冲区,但它也在提取同样的问题