使用OpenGL 实现一个实心小球沿矩形均速运动代码
时间: 2024-05-11 10:14:46 浏览: 10
以下是使用OpenGL实现一个实心小球沿矩形均速运动的代码:
```
#include <GL/glut.h>
float ball_x = 0.0f; // 小球的x坐标
float ball_y = 0.0f; // 小球的y坐标
float ball_speed = 0.01f; // 小球的移动速度
void init() {
glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // 设置背景颜色为黑色
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-1.0, 1.0, -1.0, 1.0); // 设置视口大小为[-1, 1] x [-1, 1]
}
void display() {
glClear(GL_COLOR_BUFFER_BIT); // 清除颜色缓冲区
// 绘制矩形
glBegin(GL_QUADS);
glColor3f(1.0f, 1.0f, 1.0f); // 设置矩形颜色为白色
glVertex2f(-0.5f, -0.5f);
glVertex2f(-0.5f, 0.5f);
glVertex2f(0.5f, 0.5f);
glVertex2f(0.5f, -0.5f);
glEnd();
// 绘制小球
glPushMatrix();
glTranslatef(ball_x, ball_y, 0.0f); // 平移小球
glColor3f(1.0f, 0.0f, 0.0f); // 设置小球颜色为红色
glutSolidSphere(0.1f, 20, 20); // 绘制实心小球
glPopMatrix();
glutSwapBuffers(); // 双缓冲交换前后缓冲区
}
void update(int value) {
// 更新小球位置
ball_x += ball_speed;
if (ball_x > 0.4f) {
ball_x = 0.4f;
ball_speed = -ball_speed; // 小球碰到右边界后反弹
}
if (ball_x < -0.4f) {
ball_x = -0.4f;
ball_speed = -ball_speed; // 小球碰到左边界后反弹
}
glutPostRedisplay(); // 重新绘制窗口
glutTimerFunc(10, update, 0); // 设置下一次更新
}
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(500, 500);
glutCreateWindow("Moving Ball");
init();
glutDisplayFunc(display);
glutTimerFunc(10, update, 0);
glutMainLoop();
return 0;
}
```
运行代码可以看到一个白色的矩形和一个红色的实心小球,小球沿着矩形左右移动,并在碰到边界时反弹。