使用计时器和glTranslate功能可以帮助我移动球体。但是我如何从框架边界反弹回来? 或者有没有其他方法来实现相同的? 我已经尝试使用for循环来连续翻译球体而不使用计时器功能。在这种方法中,我必须使用glOrtho限制和glTranstale函数手动计算方向点的变化,而glTranstale函数又没有任何意义。
#include <windows.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
void Timer(int ex)
{
glutPostRedisplay();
glutTimerFunc(20,Timer,0);
}
void init(void)
{
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
}
void display(void)
{
int i,j;
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glTranslatef(0.08,0.08,0.0);
glutSolidSphere (1.0, 20, 16);
glFlush ();
}
void reshape (int w, int h)
{
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity();
glOrtho (-10, 10, -10,10, -10.0, 10.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize (800, 800);
glutInitWindowPosition (100, 100);
glutCreateWindow (argv[0]);
init ();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutTimerFunc(0,Timer,0);
glutMainLoop();
return 0;
}