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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [OpenGL] Анимирование 
:(
    Опции темы
Reptor
Дата 30.9.2008, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



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

Код

while(!done)                                    // Loop That Runs While done=FALSE
    {
    //    ::Sleep(1000);
        f++;
   
        if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))    // Is There A Message Waiting?
        {
            if (msg.message==WM_QUIT)                // Have We Received A Quit Message?
            {
                done=TRUE;                            // If So done=TRUE
            }
            else                                    // If Not, Deal With Window Messages
            {
                TranslateMessage(&msg);                // Translate The Message
                DispatchMessage(&msg);                // Dispatch The Message
            }
        }
        else                                        // If There Are No Messages
        {
            // Draw The Scene.  Watch For ESC Key And Quit Messages From DrawGLScene()
            if (active)                                // Program Active?
            {
                if (keys[VK_ESCAPE])                // Was ESC Pressed?
                {
                    done=TRUE;                        // ESC Signalled A Quit
                }
                else                                // Not Time To Quit, Update Screen
                {
                    DrawGLScene();                    // Draw The Scene
                    SwapBuffers(hDC);                // Swap Buffers (Double Buffering)
                    if (keys[VK_UP]) {
                        xrot+=0.3f;
                    }
                    if (keys[VK_DOWN]) {
                        xrot-=1.3f;
                    }
                    if (keys[VK_RIGHT]){
                        yrot+=0.3f;
                    }
                    if(keys[VK_LEFT]){
                        yrot-=0.3f;
                    }

                    if(keys['Z']){
                        zrot-=0.3f;
                    }
                    if(keys['X']){
                        zrot+=0.3f;
                    }
                }
            }

            if (keys[VK_F1])                        // Is F1 Being Pressed?
            {
                keys[VK_F1]=FALSE;                    // If So Make Key FALSE
                KillGLWindow();                        // Kill Our Current Window
                fullscreen=!fullscreen;                // Toggle Fullscreen / Windowed Mode
                // Recreate Our OpenGL Window
                if (!CreateGLWindow("NeHe's OpenGL Framework",640,480,16,fullscreen))
                {
                    return 0;                        // Quit If Window Was Not Created
                }
            }
        }

        //for(int i=0;i<95000000;i++);
    //    ::Sleep(50);
    }


проблема в том что в таком виде очень приочень быстро выполняется функция DrawGLScene();     а у меня есть информация в базе за каждую секунду..... и мне надо менять состояние объекта каждую секунду.. А так я запустил за долю секунды что то всё произошло и ничего непонятно... Я добавлял ::Sleep(50); ради интереса так он вешает всё приложение...

Видел что у опенГЛ есть функции которые могут делать задержки... 

Что подскажите сделать? как реализовать чтоб у меня всё выполнялось с тем теченеем времени который мне нужен.?

Чем заменить мой while?



Это сообщение отредактировал(а) Reptor - 30.9.2008, 15:13
PM MAIL ICQ   Вверх
Mazzi
Дата 30.9.2008, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

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



Цитата(Reptor @ 30.9.2008,  15:12)
Видел что у опенГЛ есть функции которые могут делать задержки... 

Что подскажите сделать? как реализовать чтоб у меня всё выполнялось с тем теченеем времени который мне нужен.?

Чем заменить мой while?

А ты не меняй содержимое сцены, пока не пройдёт одна секунда. Заведи себе таймер, и по срабатыванию таймера меняй содержимое для отрисовки, вот и всё.


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
Reptor
Дата 30.9.2008, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

А ты не меняй содержимое сцены, пока не пройдёт одна секунда. Заведи себе таймер, и по срабатыванию таймера меняй содержимое для отрисовки, вот и всё. 


не совсем понял как это сделать... брать системное время (начало) и в цикле всегда брать новое и смотреть что разница была 1 сек...? так?

Добавлено через 36 секунд
ну как бы начало - следущее.... а потом начало переприсваивать на новое 
PM MAIL ICQ   Вверх
Rickert
Дата 1.10.2008, 03:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

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



Reptor, да, вы всё правильно поняли.
Код

DWORD curTime = GetTickCount();

if ((curTime - lastTime) >= 1000)
{
  //прошла секунда, что-нибудь делаем
  lastTime = curTime;
}



--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Reptor
Дата 1.10.2008, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Rickert,  спасибо буду пробовать.

И все же ещё б хотелось узнать ваше мнение по поводу задержки функцыями опенГл (не помню как они называются)?
И как луче делать анимацию?

И вот непонятка по поводу обычного слипа... наскоко я понял так он просто "умертвлял" все события и поэтому всё так тормозит? 

Это сообщение отредактировал(а) Reptor - 1.10.2008, 13:33
PM MAIL ICQ   Вверх
Mazzi
Дата 1.10.2008, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

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



OpenGL - графическая библиотека, чтото я не помню никаких функций для задержки с помощью её... smile 


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
Rickert
Дата 1.10.2008, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

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



Reptor, Sleep и ему подобные - это неправильное решение. У тебя всё равно задержка будет зависить от характеристики компьютера.


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

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

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


 




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


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

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