анимация
Цитата:
2.8 Анимация
Давайте оживим нашего снеговика и добавим интерактивность. Для этого надо отрисовывать кадры и реагировать на внешние события от клавиатуры или мыши. Для отрисовки кадров их надо как-то различать. Для этого мы в функции display вводим переменную time типа int с модификатором static. Создайте новый проект и в функцию display введите следующее: "static int time=0;". Модификатор static означает, что значение переменной будет сохраняться при выходе из функции. Начальное значение мы устанавливаем в ноль. Если функция display не зависит от времени, то счетчик кадров можно и не вести. Теперь добавьте следующие строчки:
glPushMatrix();
glTranslated( ((double)time)/100.0 ,0,0);
... // здесь код из предыдущего упражнения "Cнеговик"
glPopMatrix();
Запустив приложение, вы увидите, что снеговик пополз вдоль оси Х. Вот так вы можете делать анимацию. Т.е. теперь координаты объектов вычисляются в зависимости от времени.
Давайте оживим нашего снеговика и добавим интерактивность. Для этого надо отрисовывать кадры и реагировать на внешние события от клавиатуры или мыши. Для отрисовки кадров их надо как-то различать. Для этого мы в функции display вводим переменную time типа int с модификатором static. Создайте новый проект и в функцию display введите следующее: "static int time=0;". Модификатор static означает, что значение переменной будет сохраняться при выходе из функции. Начальное значение мы устанавливаем в ноль. Если функция display не зависит от времени, то счетчик кадров можно и не вести. Теперь добавьте следующие строчки:
glPushMatrix();
glTranslated( ((double)time)/100.0 ,0,0);
... // здесь код из предыдущего упражнения "Cнеговик"
glPopMatrix();
Запустив приложение, вы увидите, что снеговик пополз вдоль оси Х. Вот так вы можете делать анимацию. Т.е. теперь координаты объектов вычисляются в зависимости от времени.
Странно, но, мне кажется, надо бы наоборот убрать эти строчки- glPush и glPop. Т.е. если делать как автор прописал, то выходит, что постоянно возвращаемся в одну и ту же точку. И ничего никуда не движется
Вероятно, переменную time необходимо объявлять не в функции дисплей?А то кк-то странно выходит - все время ее обнулять...
По вопросам:
1. Почему нет? Распишите по шагам, что происходит при сохранении и восстановлении исходной матрицы (очевидно матрица ModelView модельно-видовая).
2. Переменная объявлена как static. "Обнуление" происходит только при инициализации.