#include <GLUT/GLUT.h>
#include <stdio.h>
GLfloat x1 = 100.0f;
GLfloat y1 = 150.0f;
GLsizei rsize = 50;
GLfloat xStep = 2.0f;
GLfloat yStep = 2.0f;
GLfloat windowWidth = 0.0f;
GLfloat windowHeight = 0.0f;
GLuint nTimer = 1;
// 渲染绘制图形
void RenderScene()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0f, 0.0f, 0.0f);
glRectf(x1, y1, x1 + xStep, y1 + yStep);
//glFlush();
glutSwapBuffers();
}
// 敲键响应函数
void KeyboardHandler(unsigned char key, int x, int y)
{
printf("key = %d, x = %d, y = %d\n", key, x, y);
}
// 初始化OpenGL参数
void SetupRC()
{
glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
}
// 定时函数,通过自调实现自我循环
void TimerFunction(int value)
{
if(x1 > windowWidth || x1 < 0)
{
xStep = -xStep;
}
if(y1 > windowHeight || y1 < 0)
{
yStep = -yStep;
}
x1 += xStep;
y1 += yStep;
glutPostRedisplay();
glutTimerFunc(nTimer, TimerFunction, 1);
}
// 窗口大小变化时重绘
void ChangeSize(GLsizei w, GLsizei h)
{
if(h == 0)
{
h = 1;
}
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if(w <= h)
{
windowHeight = 250.0f*h/w;
windowWidth = 250.0f;
}
else
{
windowWidth = 250.0f*w/h;
windowHeight = 250.0f;
}
glOrtho(0.0f, windowWidth, 0.0f, windowHeight, 1.0f, -1.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
int main(int argc, char* argv[])
{
// 初始化环境以及创建窗口[双缓冲模式]
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutCreateWindow("first glut window");
// 设置回调函数
glutDisplayFunc(RenderScene);
glutReshapeFunc(ChangeSize);
glutTimerFunc(nTimer, TimerFunction, 1);
glutKeyboardFunc(KeyboardHandler);
SetupRC();
//显示并进入循环等待中
glutMainLoop();
return 0;
}
【简单动画】OpenGL弹弹碰
最新推荐文章于 2022-06-09 11:51:25 发布