Цикл OpenGL For (Генерация случайной луны)

Я создаю трехмерную солнечную систему в OpenGL для университетского проекта, и я пришел к тому, что мне нужно генерировать луны. Теперь создать луну, которая вращается вокруг планеты, достаточно просто, но я пытаюсь создать цикл, который будет генерировать количество лун, о которых я говорю, и в случайных положениях вокруг планеты, так что орбита для всех них различна.

for(int count = 0; count < 5; count ++)
{
glPushMatrix();
glEnable(GL_LIGHTING);
glTranslated (rand() % 8+8, 0.0, 0.0); //FIRST
glRotated((GLdouble) spin, 1.0, 70, 0.0);
glutSolidSphere(0.8, 20, 10);
glPopMatrix();
}

Это то, что я придумал, однако, кажется, что это создает луны снова и снова. Это создает сумму, которую я указываю, но постоянно воссоздает их. У кого-нибудь есть идеи?

0

Решение

Вы должны сохранить положение вашей луны, когда они созданы, и обновить эту позицию, когда они вращаются вокруг своей планеты.

Ваш код, как он написан в настоящее время, будет создавать случайный переводчик при каждом его выполнении.

Итак, чтобы сделать это проще, добавьте процесс, который создает луны, который обновляет луны, чтобы они вращались вокруг своей планеты (у вас, вероятно, уже есть фрагмент кода, который обрабатывает вращение вокруг звезды?), А затем визуализируйте обновленную солнечную систему.

3

Другие решения

Сделать srand(0) перед for— петля, чтобы вы получали одинаковую последовательность случайных чисел каждый раз.

0

Вы должны вероятно создать структуру или класс как:

struct Moon
{
float x, y, z;
float rotAngle;
};

(Сделайте это настолько сложным, насколько вам нужно)

Создайте необходимое количество объектов (используйте массив / список / …), инициализируйте их значения перед циклом рендеринга.

И в цикле рендеринга, переберите все эти объекты, обновите (если тебе надо?) и отображать, используя их значения.

0

Однако, похоже, создание Рисование луны снова и снова.

FTFY. OpenGL не является граф сцены. Вы не создаете сцену с этим, это как-то хранится внутри и представляется пользователю по запросу. OpenGL является Рисование API. Если вы вызываете код рисования в цикле анимации, но всегда рисуете с какими-то новыми случайными параметрами, вещи будут прыгать.

Решение: вам нужен граф сцены. В вашем случае достаточно простого списка, в котором вы храните исходные параметры. Если вы хотите оживить его, вы также можете определить правильную орбитальную скорость для данного расстояния от планеты данной массы.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector