Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 07.08.2011
Сообщений: 53
1

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

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

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно"
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;,...

"undefined reference" в строках GLUT при установке OpenGL
После получения минимальных навыков создания консольных приложений на плюсах, решил перейти к...

Необработанное исключение в "0x00412b4a" в "kursovik.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00000004".
Программа компилируется нормально но потом на строчке MoveToEx(hdc,Mas.a]-&gt;x*20,Mas.a]-&gt;y*20,0);...

Необработанное исключение в "0x01082855" в "sort.exe": 0xC0000005: Нарушение прав доступа при записи "0xcccccccc"
Всем привет! помогите мне понять в чём дело. написал программу: #include &quot;stdafx.h&quot; #include...

3
2818 / 1628 / 252
Регистрация: 03.12.2007
Сообщений: 4,223
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.08.2012, 09:05

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Необработанное исключение в "0x00414558" в "467.exe": 0xC0000005: Нарушение прав доступа при чтении "0xabababbb"
При выполнении этого кода #include &lt;iostream&gt; #include&lt;conio.h&gt; using namespace std; int...

Необработанное исключение в "0x775e15de" в "laba3.exe": 0xC0000005: Нарушение прав доступа при чтении "0xfdfdfdf9".
вылезает ошибка Необработанное исключение в &quot;0x775e15de&quot; в &quot;laba3.exe&quot;: 0xC0000005: Нарушение прав...

Необработанное исключение в "0x778e15de" в "dir-3.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00000000"
#include &lt;windows.h&gt; #include &lt;d3d9.h&gt; LRESULT __stdcall WndProc(HWND hWnd, UINT msg, WPARAM...

Необработанное исключение в "0x013f2b22" в "123.exe": 0xC0000005: Нарушение прав доступа при записи "0xfdfdfdfd"
Вот функция для удаления столбца: #pragma once #include &lt;iostream&gt; using namespace std; int...


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

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

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