Есть код с мячом в OpenGL на c++ ,нужно добавить второй мяч,только зелёного цвета.
#include
#include
#define _USE_MATH_DEFINES
#include
#pragma comment (lib, "opengl32.lib")
int width = 1200;
int height = 700;
float koef;
float gravityBall = 1;
void DrawCircle(int cnt) {
float x, y;
float da = M_PI * 2.0 / cnt;
glBegin(GL_TRIANGLE_FAN);
glVertex2f(0, 0);
for (int i = 0; i <= cnt; i++) {
x = sin(da * i);
y = cos(da * i);
glVertex2f(x, y);
}
glEnd();
}
struct Tball {
float x, y;
float dx, dy;
float r;
} TBall;
Tball ball;
int TBall_Init(Tball* obj, float x1, float y1, float dx1, float dy1, float r1) {
obj->x = x1;
obj->y = y1;
obj->dx = dx1;
obj->dy = dy1;
obj->r = r1;
return 1;
}
void Tball_Show(Tball obj) {
glPushMatrix();
glTranslatef(obj.x, obj.y, 0);
glScalef(obj.r, obj.r, 1);
DrawCircle(60);
glPopMatrix();
}
void Reflect(float* da, float* a, bool cond, float wall) {
if (!cond) return;
*da *= -0.85;
*a = wall;
}
void Tball_Move(Tball* obj) {
obj->x += obj->dx;
obj->y += obj->dy;
Reflect(&obj->dy, &obj->y, (obj->y r - 1), obj->r - 1);
Reflect(&obj->dy, &obj->y, (obj->y > 1 - obj->r), 1 - obj->r);
obj->dy -= gravityBall;
Reflect(&obj->dx, &obj->x, (obj->x r - koef), obj->r - koef);
Reflect(&obj->dx, &obj->x, (obj->x > koef - obj->r), koef - obj->r);
obj->dx -= gravityBall;
}
void Game_Init() {
TBall_Init(&ball, 0, 0.5, 0.005, -0.01, 0.2);
}
void Game_Show() {
glColor3f(1.0, 0.0, 0.0);
Tball_Show(ball);
}
int main(void)
{
GLFWwindow* window;
if (!glfwInit())
return -1;
window = glfwCreateWindow(width, height, "Hello,Mr. Grinkov", NULL, NULL);
if (!window)
{
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
koef = (float)width / height;
glScalef(1 / koef, 1, 1);
Game_Init();
while (!glfwWindowShouldClose(window))
{
glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT);
Tball_Move(&ball);
Game_Show();
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwTerminate();
return 0;
}