Форум программистов, компьютерный форум CyberForum.ru

"Гладкость" движения при 25 кадрах OpenGL - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
MadRabbit
 Аватар для MadRabbit
0 / 0 / 0
Регистрация: 07.08.2011
Сообщений: 53
31.07.2012, 13:38     "Гладкость" движения при 25 кадрах OpenGL #1
Ребята, тут такое дело...
Изучаю я в общем OpenGL, пытаясь решить проблему кадров (кадр, просто количество действий в секунду), а именно, их адаптации. То есть, хотел сделать так, что бы при 25 кадрах, все движения были бы с той же скоростью, что и при 60. К примеру, если мы поворачиваем объект каждый кадр на 1 градус, то при 25 кадрах, в секунду этот объект поворачивается на 25 градусов, а на 60 кадрах, на 60 градусов в секунду, что недопустимо. С этим я еще не разобрался, но это не важно, сейчас разговор о другом.

В общем, я задумался, должен же быть лимит этой самой "гладкости". Сейчас поставил ограничитель на 25 кадров (дабы, все работало без адаптации), и изменил скорости поворота тестового объекта с 0.1, на 1.0. Объект поворачивается медленно, но при этом дергается! Я часто снимаю фрапсом видео в играх, а фрапс ограничивает фпс до указанных мною (25). В других играх, при 25 кадрах, картинка движется быстро и плавно. У меня же, при тех же 25 кадрах, картинка движется медленно, и дергается. Как это решается?
Вот мой код (если нужно, могу приложить весь проект):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
    //после создания окна:
 
    timer1 = timeGetTime();
 
    //участок отлова сообщений:
 
    //*тут отловили сообщения*
 
    timer2 = timeGetTime();
 
    if(timer2-timer1 >= 40)
    {
    timer1 = timer2;
    SwapBuffers(dc);
    redraw = true;
    }
 
    if(timer2 < timer1)
    {
    timer1 = 0;
    SwapBuffers(dc);
    redraw = true;
    }
 
    //Рисуем сцену.
    if(redraw == true)
    {
    draw();
    redraw = false;
    }
 
    //сам объект (deaw();)
 
void draw()    
{ 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);    
    glLoadIdentity();           
    gluLookAt(0,0,2.5,0,0,0,0,1,0); 
 
    d = d + 1.5; //d - глобальная переменная float
    glRotatef(d,0,0,1); 
    glRotatef((d*0.2f),0,1,0); 
 
    glEnable(GL_DEPTH_TEST); 
    glBegin (GL_TRIANGLES);    
 
    glColor3ub(255,255,0);      
    glVertex3f(0, 1, 0);      
    glVertex3f(-1, -1, -1);    
    glVertex3f(1, -1, -1); 
 
    glColor3ub(255,0,0);  
    glVertex3f(0, 1, 0);      
    glVertex3f(-1, -1, 1);    
    glVertex3f(1, -1, 1); 
 
    glColor3ub(0,255,0); 
    glVertex3f(0, 1, 0);      
    glVertex3f(-1, -1, -1);    
    glVertex3f(-1, -1, 1); 
 
    glColor3ub(0,0,255);  
    glVertex3f(0, 1, 0);      
    glVertex3f(1, -1, 1);    
    glVertex3f(1, -1, -1); 
 
    glEnd();
    //glFlush();
    glDisable(GL_DEPTH_TEST); 
 }
Ребят, очень нужна ваша помощь, заранее благодарен.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.07.2012, 13:38     "Гладкость" движения при 25 кадрах OpenGL
Посмотрите здесь:

C++ прмогите написать программу "моделирование движения спутника"
C++ если не составит труда(при вводе "n" должно создаваться предложение "Мне n год (года)")
Как доказать, что при "а = b" на место "а" возвращается ссылка? C++
При сокращении "Фамилия Имя Отчество" к "Фамилия И.О." пропадают "И.О." C++
Возникает ошибка "0xC0000005: Нарушение прав доступа при чтении "0xfeeefee2"." C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
31.07.2012, 18:22     "Гладкость" движения при 25 кадрах OpenGL #2
Цитата Сообщение от MadRabbit Посмотреть сообщение
Я часто снимаю фрапсом видео в играх, а фрапс ограничивает фпс до указанных мною (25). В других играх, при 25 кадрах, картинка движется быстро и плавно.
Именно при 25 FPS в игре? Ведь если при большом FPS в игре снимается видео 25 FPS с интерполяцией кадров, то это смотрится более-менее (кроме особо быстрых игр).
timeBeginPeriod / timeEndPeriod вызываешь? Если нет, может быть, точности таймера не хватает.
MadRabbit
 Аватар для MadRabbit
0 / 0 / 0
Регистрация: 07.08.2011
Сообщений: 53
31.07.2012, 18:31  [ТС]     "Гладкость" движения при 25 кадрах OpenGL #3
Цитата Сообщение от Somebody Посмотреть сообщение
Именно при 25 FPS в игре? Ведь если при большом FPS в игре снимается видео 25 FPS с интерполяцией кадров, то это смотрится более-менее (кроме особо быстрых игр).
timeBeginPeriod / timeEndPeriod вызываешь? Если нет, может быть, точности таймера не хватает.
Нус, по старым проектам видно, что фрапс ставит свой внешний ограничитель (особенно по Quake 3, дергается все на 25 сильнее, чем еслиб я снимал в 60).
Точности таймера, вроде как хватает, пару раз замечал, что фрапс показывает на 1 кадр больше/меньше, но очень редко. Примерно раз в 5 минут.

timeBeginPeriod / timeEndPeriod не вызываю.
MadRabbit
 Аватар для MadRabbit
0 / 0 / 0
Регистрация: 07.08.2011
Сообщений: 53
02.08.2012, 09:05  [ТС]     "Гладкость" движения при 25 кадрах OpenGL #4
Поднимаю тему.
Yandex
Объявления
02.08.2012, 09:05     "Гладкость" движения при 25 кадрах OpenGL
Ответ Создать тему
Опции темы

Текущее время: 08:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru