用OpenGL实现小球动画的问题

douping 2010-01-18 07:12:48
我用glTranslatef()函数实现了一个小球在窗口中运动的程序(在窗口中来回弹),但是显示的小球是闪烁的,不清晰,不知道是怎么回事?请大家帮帮忙!源程序如下:
#include <stdlib.h>
#include <stdio.h>
#include <GL/glut.h>
float x=-1.0;
float y=0.4;
bool flagx=true;
bool flagy=true;
float a=1;
float b=1;
void background()
{
glClearColor(1.0,1.0,1.0,0.0);
}

void myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glTranslatef(x,y,0.0);
glBegin(GL_POLYGON);
glColor3f(1.0,0.0,0.0);
glutSolidSphere(0.05,20.0,20.0);
glEnd();
glPopMatrix();
glFlush();
}

void myReshape(GLsizei w,GLsizei h)
{
glViewport(0,0,w,h);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();

if(w <= h)
gluOrtho2D(-2.0,2.0,-2.0,2.0*(GLfloat)h/(GLfloat)w);
else
gluOrtho2D(-2.0,2.0*(GLfloat)w/(GLfloat)h,-2.0,2.0);
glMatrixMode(GL_MODELVIEW);
}
void chonghui()
{
a+=0.00005;
//x
if (x>=2.0)
{
flagx=false;
}
if (x<=-2.0)
{
flagx=true;
}
if(flagx)
x+=0.001*a;
else
x-=0.001*a;
b+=0.00002;
//y
if (y>=2.0)
{
flagy=false;
}
if (y<=-2.0)
{
flagy=true;
}

if(flagy)
y+=0.001*b;
else
y-=0.001*b;

glutPostRedisplay();
}
int main(int argc,char ** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(400,400);
glutInitWindowPosition(200,200);

glutCreateWindow("Triangle");

background();

glutReshapeFunc(myReshape);
glutDisplayFunc(myDisplay);
glutIdleFunc(chonghui);
glutMainLoop();

return(0);
}
...全文
208 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
dukelee 2010-01-18
  • 打赏
  • 举报
回复

void myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glTranslatef(x,y,0.0);
glBegin(GL_POLYGON);
glColor3f(1.0,0.0,0.0);
glutSolidSphere(0.05,20.0,20.0);
glEnd();
glPopMatrix();
glFlush(); 、//这里双缓冲试试glutSwapBuffers();
}
  • 打赏
  • 举报
回复
应该结合双缓冲显示
douping 2010-01-18
  • 打赏
  • 举报
回复
第一次发代码,不知道怎么调整格式,不好意思。。

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧