Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> анимированные камеры в Opengl, анимированные камеры в Opengl  
:(
    Опции темы
besionok
Дата 20.5.2008, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 20.5.2008

Репутация: нет
Всего: нет



добрый день, недавно начал программировать с Opengl. 
Может кто подсказет, как сделат анимированный переход viewpointov в Opengl?
За исходник или фрагмент отдельная благодарность
PM MAIL   Вверх
Solomon
Дата 20.5.2008, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 23.1.2006
Где: Украина Киев

Репутация: нет
Всего: 2



Цитата(besionok @  20.5.2008,  11:26 Найти цитируемый пост)
Может кто подсказет, как сделат анимированный переход viewpointov в Opengl?
????????????

можешь более подробно описать что тебе требуеться?


--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
besionok
Дата 20.5.2008, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 20.5.2008

Репутация: нет
Всего: нет



Цитата(Solomon @ 20.5.2008,  12:39)
Цитата(besionok @  20.5.2008,  11:26 Найти цитируемый пост)
Может кто подсказет, как сделат анимированный переход viewpointov в Opengl?
????????????

можешь более подробно описать что тебе требуеться?

есть 3 камеры, надо что бы при переключении камеры с одной на другую, они не перепрыгивали, а плавно переходили... 


PM MAIL   Вверх
Solomon
Дата 20.5.2008, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 23.1.2006
Где: Украина Киев

Репутация: нет
Всего: 2



Камера одна... просто она может находиться в разных позициях... вот и смотришь.. допустим она у тебя в позиции X1 Y1 Z1 тебе надо переместить её в позицию X2, Y2, Z2.. береш и небольшим приростом координат перемещаешь её туда. Т.е. не сразу присвоением новой позиции, а приростом необходимых координат... по другому никак, если я правильно поныл постановку вопроса


--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
besionok
Дата 20.5.2008, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 20.5.2008

Репутация: нет
Всего: нет



Цитата(Solomon @ 20.5.2008,  12:52)
Камера одна... просто она может находиться в разных позициях... вот и смотришь.. допустим она у тебя в позиции X1 Y1 Z1 тебе надо переместить её в позицию X2, Y2, Z2.. береш и небольшим приростом координат перемещаешь её туда. Т.е. не сразу присвоением новой позиции, а приростом необходимых координат... по другому никак, если я правильно поныл постановку вопроса

если можно фрагментик кода, а то не допонимаю :(
PM MAIL   Вверх
baldina
Дата 20.5.2008, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



камера это совокупность её положения (translation) и направлением (rotation). 
переход из одного состояния в другое выполняется при помощи интерполяции. 
в простейшем случае можно линейно интерполировать матрицу трансформации, однако при этом камера будет не плавно переходить из одного положения в другое, а совершать сложные движения. лучше всего отдельно интерполировать позицию и поворот. 
поворот, в свою очередь - тоже матрица, 3х3 и с ней такие же проблемы интерполяции. Поэтому (и не только) повороты часто хранят в кватернионах. Кватернион легко построить из матрицы поворота и наоборот, а интерполяция кватернионов производится обычным образом (еще лучше - использовать сферическую линейную интерполяцию, тогда поворот будет наиболее естественным). Посмотри http://www.flipcode.com/documents/matrfaq.html, там все это есть.

параметрически линейная интерполяция от а к b определяется так:
Код

template <typename T>
T lerp (const T& a, const T& b, double t)
{
  return T (a*(1-t) + b*t);
}

Таким образом плавный переход от точки p1 к p2 за 10 шагов
Код

Point3d p1, p2;
for (int i=0; i <= 9; ++i)
{
   Point3d p = lerp (p1, p2, i/9.0);
   // use p 
}


Это сообщение отредактировал(а) baldina - 20.5.2008, 13:56
PM MAIL   Вверх
besionok
Дата 20.5.2008, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 20.5.2008

Репутация: нет
Всего: нет



Цитата(baldina @ 20.5.2008,  13:53)
камера это совокупность её положения (translation) и направлением (rotation). 
переход из одного состояния в другое выполняется при помощи интерполяции. 
в простейшем случае можно линейно интерполировать матрицу трансформации, однако при этом камера будет не плавно переходить из одного положения в другое, а совершать сложные движения. лучше всего отдельно интерполировать позицию и поворот. 
поворот, в свою очередь - тоже матрица, 3х3 и с ней такие же проблемы интерполяции. Поэтому (и не только) повороты часто хранят в кватернионах. Кватернион легко построить из матрицы поворота и наоборот, а интерполяция кватернионов производится обычным образом (еще лучше - использовать сферическую линейную интерполяцию, тогда поворот будет наиболее естественным). Посмотри http://www.flipcode.com/documents/matrfaq.html, там все это есть.

параметрически линейная интерполяция от а к b определяется так:
Код

template <typename T>
T lerp (const T& a, const T& b, double t)
{
  return T (a*(1-t) + b*t);
}

Таким образом плавный переход от точки p1 к p2 за 10 шагов
Код

Point3d p1, p2;
for (int i=0; i <= 9; ++i)
{
   Point3d p = lerp (p1, p2, i/9.0);
   // use p 
}

да, но камера ето 3 координаты и после каждой изменения каздой надо отображат камеру?
PM MAIL   Вверх
baldina
Дата 20.5.2008, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



да, так и получится движение

Добавлено через 5 минут и 5 секунд
точнее - надо отображать после каждого изменения совокупности данных, определяющих камеру, типа 

Код

for (int i=0; i < 10; ++i)
{
   double t = i/9.;
   roll = lerp (roll1, roll2, t);
   pitch = lerp (pitch1, pitch2, t);
   yaw = lerp (yaw1, yaw2, t);

   set_and_draw (roll, pitch, yaw);
}


но это только для примера, лучше кватернионом поворот представлять, см. выше

Добавлено через 12 минут и 7 секунд
тут хороший готовый пример http://nehe.gamedev.net/data/lessons/lesso...on_Camera_Class
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0530 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.