Нужна помощь с пузырьками. Вроде все нормально они всплывают и увеличиваются в размере, но что-то понять не могу почему они начинают всплывать и генерироваться от середины кастрюли. Помогите пофиксить, чтобы они всплывали в начале кастрюли, относительно воды и заканчивались (исчезали) в конце кастрюли, относительно воды.
Код:
#define GL_SILENCE_DEPRECATION // apple
#include <GLUT/glut.h>
#include <stdlib.h>
float T = 100; // Температура дна кастрюли
float T0 = 20; // Температура воды
int bubbleX[10]; // Массив для хранения координат X пузырьков
int bubbleY[10]; // Массив для хранения координат Y пузырьков
float bubbleSize[50]; // Массив для хранения размеров пузырьков
int numBubbles = 0; // Количество пузырьков
void display() {
glClear(GL_COLOR_BUFFER_BIT);
// кастрюля
glColor3f(0.5, 0.5, 0.5); //серый цвет
glBegin(GL_POLYGON);
glVertex2f(50, 50);
glVertex2f(250, 50);
glVertex2f(250, 250);
glVertex2f(50, 250);
glEnd();
// ручки
glColor3f(0.5, 0.5, 0.5); //серый цвет
glBegin(GL_POLYGON);
glVertex2f(40, 150);
glVertex2f(50, 150);
glVertex2f(50, 170);
glVertex2f(40, 170);
glEnd();
glColor3f(0.5, 0.5, 0.5);//серый цвет
glBegin(GL_POLYGON);
glVertex2f(250, 150);
glVertex2f(260, 150);
glVertex2f(260, 170);
glVertex2f(250, 170);
glEnd();
// Вода
glColor3f(0.5, 0.5, 1.0); // Синий цвет
glBegin(GL_POLYGON);
glVertex2f(60, 60);
glVertex2f(240, 60);
glVertex2f(240, 240);
glVertex2f(60, 240);
glEnd();
for (int i = 0; i < numBubbles; i++) {
if (bubbleY[i] < 230) { // вверх кастрюли
bubbleY[i]+=10; // Пузырек двигается вверх
bubbleSize[i] += 0.50; // увеличение пузырька
glColor3f(1.0, 1.0, 1.0); // Белый цвет
glBegin(GL_POLYGON);
float x = bubbleX[i];
float y = bubbleY[i];
float size = bubbleSize[i];
glVertex2f(x, y);
glVertex2f(x + size, y);
glVertex2f(x + size, y + size);
glVertex2f(x, y + size);
glEnd();
} else {
// удаление пузырька из массива при достижении верха
for (int j = i; j < numBubbles - 1; j++) {
bubbleX[j] = bubbleX[j + 1];
bubbleY[j] = bubbleY[j + 1];
bubbleSize[j] = bubbleSize[j + 1];
}
numBubbles--;
}
}
glFlush();
}
void addBubble() {
if (numBubbles < 15) { // Добавляем новый пузырек только если их количество меньше 15
bubbleX[numBubbles] = rand() % 80 + 110; // Случайная координата X внутри кастрюли
bubbleY[numBubbles] = 100; // Начальная координата Y - дно кастрюли
bubbleSize[numBubbles] = 1.0; // Начальный размер пузырька
numBubbles++;
}
}
void timer(int value) {
addBubble(); // Добавляем новый пузырек при каждом тике таймера
glutPostRedisplay(); // Перерисовываем сцену
glutTimerFunc(500, timer, 0); // Устанавливаем таймер на следующий тик через 500 миллисекунд
}
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutCreateWindow("Кастрюля");
glutInitWindowSize(400, 400);
glutDisplayFunc(display);
glOrtho(0, 400, 0, 400, -1, 1); // ортографическая проекция
glutTimerFunc(500, timer, 0); // Устанавливаем таймер на первый тик через 500 миллисекунд
glutMainLoop();
return 0;
}