2D анимация в OpenGL

Тема в разделе "WASM.OpenGL", создана пользователем gehedzh, 8 сен 2010.

  1. gehedzh

    gehedzh New Member

    Публикаций:
    0
    Регистрация:
    8 сен 2010
    Сообщения:
    6
    Хочу сделать простую анимацию в OpenGL. Но не понял как сделать движение нескольких объектов. Допустим у меня будет несколько кругов которые должны изменять свои координаты примерно так
    Код (Text):
    1.     int X = getRandomNumber(R, 500 - R); // x - координата
    2.     int Y = getRandomNumber(R, 500 - R); // y - координата
    3.     float angle = getRandomNumber(0, 360) * 3.14 / 180; // угол
    4.     int Vx = V * sin(angle);
    5.     int Vy = V * cos(angle);
    6.  
    7.     while (key != 'q')
    8.     {
    9.         X += Vx;
    10.         Y += Vy;
    11.         if (X > 500 - R) { X = 500 - R; Vx = -Vx; }
    12.         if (Y > 500 - R) { Y = 500 - R; Vy = -Vy; }
    13.         if (Y < R) { Y = R; Vy = -Vy; }
    14.         if (X < R) { X = R; Vx = -Vx; }
    15.         ...
    16.     }
    где Vx, Vy - составляющие скорости, R - радиус круга, 500 - размер окна
    Может кто-нибудь накидать простой пример как это сделать. Я пробовал, но у меня при применении функций преобразования "смещается" вся сцена.
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    gehedzh
    Советую взять книгу и почитать. Ф.Хилл OpenGL. Программирование компьютерной графики.

    OpenGL собственно как и DirectX машина состояний. Она помнит предыдущее состояние тех пор пока ты не изменишь его.

    Поэтому у тебя вся сцена и крутиться. Тебе надо перед выводом нового объекта устанавливать единичную матрицу вида.
    Либо делать обратное преобразование либо использовать стек матриц.

    Или если у тебя один объект движутся относительно другого, то делать просто соответствующие преобразования.