Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2009, 16:47   #1
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию OpenGL. Проблема со скоростью передвижения объектов

Начал изучать OpenGL по урокам http://pmg.org.ru/nehe/
Рисую треугольник:
Код:
glTranslatef(triX, triY, -10.0f);
glRotatef(triRt, 0.0f, 0.0f, 1.0f);
glBegin(GL_TRIANGLES);
     glColor3f(0, 1, 0); glVertex3f( -0.5f,  0.5f,  0.0f);
     glColor3f(0, 0, 1); glVertex3f(  0.5f,  0.5f,  0.0f);
     glColor3f(1, 0, 0); glVertex3f(  0.0f, -0.5f,  0.0f);
glEnd();
Далее при нажатии кнопок на клавиатуре перемещаю (и вращаю) его:
Код:
if(ogl.keys[L'W'])
        if(y < 3.7f)
            y += 0.03f;

    if(ogl.keys[L'S'])
        if(y > -3.7)
            y -= 0.03f;

    if(ogl.keys[L'D'])
        if(x < 5.0f)
            x += 0.03f;

    if(ogl.keys[L'A'])
        if(x > -5.0f)
            x -= 0.03f;

    if(ogl.keys[VK_RIGHT])
    {
        if(rt < 0.0f) rt=360.0f;
        rt -= 5.0f;
    }

    if(ogl.keys[VK_LEFT])
    {
        if(rt > 360.0f) rt=0.0f;
        rt += 5.0f;
    }
Возникла проблема - у меня на компьютере с установленной ОС Windows Vista он перемещается нормально. Если запустить прогу на виртуальной машине с установленной Windows XP он начинает перемещаться с очень большой скоростью. У друга на Windows XP тоже перемещается очень быстро.
Как можно решить данную проблему?
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 25.10.2009, 16:59   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

виртуальная машина не есть адекватная проверка...
дабы скорость посылки кнопок была одинаковой делайте прореживание (не задержку), т.е чтобы в единицу времени проходило n- посылок
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 25.10.2009, 17:06   #3
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Насколько я помню, все величины надо умножать на время прорисовки кадра, чтобы при любом ФПС он двигался одинаково
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 25.10.2009, 20:58   #4
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,691
По умолчанию

Код:
unit Mini2DTimer;

interface

Uses Windows;



procedure MSStartTimet();

function MSStopTimer(): Double;



implementation



var

  TimeStart, TimeStop, Frequency: int64;



procedure MSStartTimet();

begin

  QueryPerformanceCounter(TimeStart);

end;



function MSStopTimer(): Double;

begin

  QueryPerformanceCounter(TimeStop);

  Result:=(TimeStop-TimeStop)/Frequency*1000000;

end;



initialization

  QueryPerformanceCounter(TimeStart);

  QueryPerformanceCounter(TimeStop);

  QueryPerformanceFrequency(Frequency);

end.
Перевести это на си труда не составит.
MSStartTimet - замеряем стартовое время(начало сцены)
MSStopTimer - высчитывает дельту и возвращает в миллисекундах(вроде как=))))(конец сцены)
Вот ваша дельта времени, в течении которого шли расчеты и прорисовывалась сцена.
Kostia вне форума Ответить с цитированием
Старый 25.10.2009, 23:20   #5
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Спасибо за советы!
Завтра буду пробовать
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 26.10.2009, 13:40   #6
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,691
По умолчанию

И еще могу добавить от себя.
glTranslatef();
glRotate();
...
На самом деле ты не треугольник двигаешь и камеру(систему координат) и при реализации более сложных сцен это стоит учитывать.(Все в этом мире относительно(c))
NeHe в своих примерах использует старую библиотеку для загрузки изображений и при этом она поддерживает только bmp(может что-то еще). Поэтому я советую использовать библиотеку OpenIL или FreeImage они поддерживают кучу современных форматов, при этом FreeImage, точно можно использовать как статическую библиотеку, а не динамическую, на счет OpenIL я не знаю.
Напиши для себя пару либ для загрузки картинок и моделей, тогда познавать дебри и расширения OpenGL будет намного проще.
Kostia вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
OpenGL: проблема с цветом N!ckeL Общие вопросы Delphi 5 10.01.2010 15:14
Проблема с проектом в OpenGL 30MBU Помощь студентам 4 12.10.2009 14:44
проблема создания массива объектов Meduzza Общие вопросы C/C++ 3 28.05.2009 05:07
Проблема с автоматическим подключением библиотек объектов iliy Общие вопросы Delphi 6 31.01.2009 06:39
Delphi: Проблема с созданием объектов Omedus Помощь студентам 4 08.08.2008 18:42