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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [OpenGL] Ожидание прорисовки, как сделать? 
:(
    Опции темы
Gryphon
Дата 8.5.2008, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Такая проблема вот: есть программа, рисующая сцену на OpenGL. В определённый момент начинает прорисоваваться анимация определённого действия. В коде это выглядит примерно так:
Код

double    param; //Это счётчик, от которого пляшет анимация
bool    doing = false; //Это флаг прорисовки в настоящий момент

int main ( int argc, char *argv[] )
{
    //Всё, что нужно для инициализации OpenGL, в частности:
    glutDisplayFunc    ( Display );
    glutIdleFunc    ( Idle );

    action(1.0); //Это наше действие

    glutMainLoop ();
    return 0;
}

void action ( double a )
{
    param = a;
    doing = true; //Поехали!
}

void Display ()
{
    //Тут стандартная лабуда, затем:

    if ( doing )
        draw_action ();
    else
        draw_static_scene ();
        
    glutSwapBuffers ();
}

void Idle ()
{
    if ( doing )
        param += 0.05;
    if ( param == 3.1415 )
        doing = false; //Типа закончили

    glutPostRedisplay();
}

Теперь вот в чём проблема. Если я вдруг захочу подряд прорисовать 2 действия, вот так, например:
action(1.0);
action(2.0);
то буду послан, так как прорисуется только последнее, что видно из кода. Вопрос: как быть? Тут надо либо как-то по-другому всё это организовывать (только я не понимаю как), либо заставить прогу ждать прорисовки первого действия, а уж только потом приступать к прорисовке следующего. Опять же вопрос: КАК? Помогите, люди добрые 8)
PM   Вверх
Solomon
  Дата 8.5.2008, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Как то странновато у тебя построена архитектура...
ну впринципе можно очередью сделать... впринципе тем же вектором из STL (я c STL плохо знаком.. так что может там что то более удобное есть для организации очереди. Помоему там есть тип даных типа Очередь.. поищи в гугле если не знаком) т.е. в конец вектора забиваешь номер действия которое требуеться сделать.. дальше 

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

ну и естественно не забывать в конец запихивать номер(или что там у тебя) требуемой анимации


Надеюсь все понятно...




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


любитель
****


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

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



Цитата(Gryphon @  8.5.2008,  18:39 Найти цитируемый пост)
Если я вдруг захочу подряд прорисовать 2 действия, вот так, например:

постановка вопроса неправильная.. Кол-во прорисовок не зависит от того что будет изображено.
Отдели логически просрисовку сцены от воздействия  на нее и посади расчет (не просрисовку) показа нужного кадра на несушую (например таймер)



--------------------
PM MAIL WWW   Вверх
vinter
Дата 8.5.2008, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

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



Цитата(Solomon @  8.5.2008,  20:47 Найти цитируемый пост)
ну впринципе можно очередью сделать... впринципе тем же вектором из STL

std::queue


--------------------
Мой блог
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

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

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


 




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


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

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