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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
MadRabbit
0 / 0 / 0
Регистрация: 07.08.2011
Сообщений: 53
#1

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

31.07.2012, 13:38. Просмотров 1064. Ответов 3
Метки нет (Все метки)

Ребята, тут такое дело...
Изучаю я в общем 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++ Необработанное исключение в "0x00412b4a" в "kursovik.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00000004".
Необработанное исключение в "0x00414558" в "467.exe": 0xC0000005: Нарушение прав доступа при чтении "0xabababbb" C++
Необработанное исключение в "0x778e15de" в "dir-3.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00000000" C++
C++ Необработанное исключение в "0x013f2b22" в "123.exe": 0xC0000005: Нарушение прав доступа при записи "0xfdfdfdfd"
Необработанное исключение в "0x775e15de" в "laba3.exe": 0xC0000005: Нарушение прав доступа при чтении "0xfdfdfdf9". C++
C++ Необработанное исключение в "0x01082855" в "sort.exe": 0xC0000005: Нарушение прав доступа при записи "0xcccccccc"
Необработанное исключение в "0x0fc1d484 (msvcr100d.dll)" в "1.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00aee0af" C++
C++ Необработанное исключение в "0x54a2d2e9 (msvcr100d.dll)" в "3.exe": 0xC0000005: Нарушение прав доступа при записи "0xcccccccc".
C++ Ошибка Необработанное исключение в "0x001d18f8" в "lr7v2.exe": 0xC0000005: Нарушение прав доступа при чтении "0xcdcdcde9"
Необработанное исключение в "0x1027c9c7 (msvcr100d.dll)" в "gh.exe": 0xC0000005: Нарушение прав доступа при чтении "0xfeeefeee". C++
C++ Необработанное исключение в "0x76f015de" в "контрольная 1 задача 2.exe": 0xC0000005: Нарушение прав доступа при чтении "0x334e2c64"
Вывести на экран фразу "Мне n лет", учитывая что при некоторых значениях n слово "лет" надо заменить на "год" C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Somebody
2786 / 1600 / 145
Регистрация: 03.12.2007
Сообщений: 4,189
Завершенные тесты: 1
31.07.2012, 18:22     "Гладкость" движения при 25 кадрах OpenGL #2
Цитата Сообщение от MadRabbit Посмотреть сообщение
Я часто снимаю фрапсом видео в играх, а фрапс ограничивает фпс до указанных мною (25). В других играх, при 25 кадрах, картинка движется быстро и плавно.
Именно при 25 FPS в игре? Ведь если при большом FPS в игре снимается видео 25 FPS с интерполяцией кадров, то это смотрится более-менее (кроме особо быстрых игр).
timeBeginPeriod / timeEndPeriod вызываешь? Если нет, может быть, точности таймера не хватает.
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
0 / 0 / 0
Регистрация: 07.08.2011
Сообщений: 53
02.08.2012, 09:05  [ТС]     "Гладкость" движения при 25 кадрах OpenGL #4
Поднимаю тему.
Yandex
Объявления
02.08.2012, 09:05     "Гладкость" движения при 25 кадрах OpenGL
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru