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

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

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

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

31.07.2012, 13:38. Просмотров 1092. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.07.2012, 13:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос "Гладкость" движения при 25 кадрах OpenGL (C++):

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

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

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

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

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

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

3
Somebody
2791 / 1602 / 147
Регистрация: 03.12.2007
Сообщений: 4,198
Завершенные тесты: 1
31.07.2012, 18:22 #2
Цитата Сообщение от MadRabbit Посмотреть сообщение
Я часто снимаю фрапсом видео в играх, а фрапс ограничивает фпс до указанных мною (25). В других играх, при 25 кадрах, картинка движется быстро и плавно.
Именно при 25 FPS в игре? Ведь если при большом FPS в игре снимается видео 25 FPS с интерполяцией кадров, то это смотрится более-менее (кроме особо быстрых игр).
timeBeginPeriod / timeEndPeriod вызываешь? Если нет, может быть, точности таймера не хватает.
0
MadRabbit
0 / 0 / 0
Регистрация: 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
MadRabbit
0 / 0 / 0
Регистрация: 07.08.2011
Сообщений: 53
02.08.2012, 09:05  [ТС] #4
Поднимаю тему.
0
02.08.2012, 09:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2012, 09:05
Привет! Вот еще темы с ответами:

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

Необработанное исключение в "0x54a2d2e9 (msvcr100d.dll)" в "3.exe": 0xC0000005: Нарушение прав доступа при записи "0xcccccccc". - C++
#include&lt;iostream&gt; #include&lt;conio.h&gt; #include&lt;string&gt; #include&lt;stdlib.h&gt; using namespace std; class Goods { char* name; ...

Ошибка Необработанное исключение в "0x001d18f8" в "lr7v2.exe": 0xC0000005: Нарушение прав доступа при чтении "0xcdcdcde9" - C++
class Hdd { public: char Hdd_name; int total_space; int free_space; int speed; Hdd *next; Hdd *previous; };

Необработанное исключение в "0x0fc1d484 (msvcr100d.dll)" в "1.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00aee0af" - C++
помогите разобраться в чем ошибка? необходимо, чтобы ввод массива осуществлялся с клавиатуры построчно #include &lt;stdio.h&gt; ...


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

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

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