0 / 0 / 1
Регистрация: 07.08.2011
Сообщений: 53
1

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

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

Author24 — интернет-сервис помощи студентам
Ребята, тут такое дело...
Изучаю я в общем 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); 
 }
Ребят, очень нужна ваша помощь, заранее благодарен.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.07.2012, 13:38
Ответы с готовыми решениями:

Прелоадер при коде в кадрах
Столкнулся с проблемой. Вобщем в 1 кадре у меня скрипт прелоадера: import flash.display.Loader;...

Найти область определения и исследовать на гладкость функциональный ряд
Помогите разобраться с областью определения и гладкостью ряда \sum...

Найти скорость и угол движения тела относительно линии движения одного из них при абсолютно упругом ударе
Заданы скорости двух тел одинаковой массы, движущихся под заданным углом. Найти скорость и угол...

Найти скорость и угол движения тела относительно линии движения одного из них при абсолютно неупругом ударе
Заданы скорости двух тел одинаковой массы, движущихся под заданным углом. Найти скорость и угол...

3
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
31.07.2012, 18:22 2
Цитата Сообщение от MadRabbit Посмотреть сообщение
Я часто снимаю фрапсом видео в играх, а фрапс ограничивает фпс до указанных мною (25). В других играх, при 25 кадрах, картинка движется быстро и плавно.
Именно при 25 FPS в игре? Ведь если при большом FPS в игре снимается видео 25 FPS с интерполяцией кадров, то это смотрится более-менее (кроме особо быстрых игр).
timeBeginPeriod / timeEndPeriod вызываешь? Если нет, может быть, точности таймера не хватает.
0
0 / 0 / 1
Регистрация: 07.08.2011
Сообщений: 53
31.07.2012, 18:31  [ТС] 3
Цитата Сообщение от Somebody Посмотреть сообщение
Именно при 25 FPS в игре? Ведь если при большом FPS в игре снимается видео 25 FPS с интерполяцией кадров, то это смотрится более-менее (кроме особо быстрых игр).
timeBeginPeriod / timeEndPeriod вызываешь? Если нет, может быть, точности таймера не хватает.
Нус, по старым проектам видно, что фрапс ставит свой внешний ограничитель (особенно по Quake 3, дергается все на 25 сильнее, чем еслиб я снимал в 60).
Точности таймера, вроде как хватает, пару раз замечал, что фрапс показывает на 1 кадр больше/меньше, но очень редко. Примерно раз в 5 минут.

timeBeginPeriod / timeEndPeriod не вызываю.
0
0 / 0 / 1
Регистрация: 07.08.2011
Сообщений: 53
02.08.2012, 09:05  [ТС] 4
Поднимаю тему.
0
02.08.2012, 09:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.08.2012, 09:05
Помогаю со студенческими работами здесь

Определить среднюю кинетическую энергию поступатель- ного движения и вращательного движения молекулы азота при температуре 10 K. Определи
Определить среднюю кинетическую энергию поступатель- ного движения и вращательного ...

Какая значительная разница между OpenGL ES 2.0 и OpenGL 3.3 при использовании в Qt
Привет всем! У меня видеокарта имеет поддержку 3.1 версию OpenGL, обновить хочу её с помощью...

Ошибки при подключение opengl, немного не связанные с opengl
#include &lt;windows.h&gt; #include &quot;stdafx.h&quot; #include &lt;gl/gl.h&gt; #include &lt;gl/glu.h&gt; #include...

БД о кадрах
Помогите пожалуйста, очень нужно База данных содежрит информацию о кадрах: ФИО рабоотника...

Нуждаемся в кадрах
Доброго времени суток. Нуждаемся в кадрах, 1. Дизайнер Оплата: сдельная Работа: рисовать...

Зациливание на кадрах
Вот есть первые 2 слоя. Самолёт - 2 -ый слой, фон - 1-ый слой. 2 слой летит по 1 -ему слою. После...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru