|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
28.02.2020, 11:32 | #1 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
Почему так?
Здравстуйте.
Не уверен, к какому разделу относятся вопросы про OpenGL. Обычно OpenGL используется для написания игр. Но у меня не игра, а просто программа. Играть в нее нельзя. В общем, вопрос в том, как сделать прыжок в этой недоигре? Сразу оговорюсь, что всякие продвинутые умноженя матриц , GLM и т.п. не используются. Используются по-старинке функции glRotate() и glTranslate(). По-идее, алгоритм такой: 1) ввести переменную, отвечающую за вектор движения по вертикали 2) при нажатии клавиши присваивать этому вектору некое значение больше нуля (это значение будет как-бы тянуть камеру по вертикальной оси) 3) в процедуре обработки движения прибавлять этот вектор к текущей позиции камеры. 4) там же отнимать от вектора некое маленькое число, тем самым имитируя гравитацию. Но если делать это в цикле, то ничего хорошего не получается. При прибавлении вектора к позиции камеры, она перемещается мгновенно. И скорость прыжка зависит от FPS. Умножение на deltatime, почему-то, не помегает. Всё-равно получается хрень. Адекватный прыжок получается сделать только если вызывать все процедуры по таймеру. Например, следующий код вызывается примерно 30 раз в секунду. SetTimer(wnd, 0, 1000 / 30, nullptr); Код:
Но если FPS падает ниже, то скорость прыжка тоже падает. Прыжок получается как у америкосов на Луне. Но при этом, вроде как, скорость перемещения вперёд/назад/влево/вправо остаётся неизменной. Почему так? |
28.02.2020, 12:06 | #2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
|
28.02.2020, 13:07 | #3 | |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
Цитата:
Сейчас тут нету deltatime. Эта хрень выполняется в таймере. Но если выполнять код в цикле, а не в таймере, то тогда нужно умножать на deltatime. Но это не дает желаемого результата. Перемещение получается сделать очень просто (и FPS не влияет), а прыжок - нет. И я не пойму, что не так. Понятно что всё не так. Вроде всё просто, но работает не так как надо. Если делать без таймера, то перемещение камеры на прыжок вообще не похоже. |
|
28.02.2020, 13:34 | #4 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
|
28.02.2020, 13:54 | #5 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
|
28.02.2020, 16:08 | #6 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
FPS напрямую зависит от таймера...
|
29.02.2020, 10:47 | #7 | |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
Цитата:
Вообще в интернете полно статей как сделать прыжок в игре. Код:
Напоминаю как выглядит формула перемещения V:=V-g*t; y:=y+V*t-g*t*t/2;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
|
29.02.2020, 15:33 | #8 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
Ну а константы здесь тогда при чем? Вы объяснять так и не научились. Кидаетесь всегда какими-то короткими загадочными фразами и сиди потом вангуй. Зато темы переименовывать умеете.
Теперь название темы совершенно не отражает ее сути. Тему переименовали в "почему так?", а почему так, так толком и не объяснили. Я честно пытался найти, но не нашел. Да и что там нового? Алгоритм-то я и так знаю. У меня реализовать его в коде не получалось. Сейчас уже получилось. Сегодня весь день тестировал. Я просто одну из переменных забыл на дельту умножить и не замечал этого. Если бы еще один день потыкался, то нашел бы косяк. Это симуляция гравитации. Если по таймеру, то вполне работоспособно Хотя последняя строчка явно лишняя. V - скорость, Т - время. а G - это притяжение? |
29.02.2020, 18:14 | #9 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Я к переименовыванию тем отношения не имею.
Не "вангуй" а "гугли", хотя иногда это одно и тоже. Вся идея в том, чтоб вы сами пришли к решению - тогда материал усваивается лучше. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Почему так... | Hermeneticus | Общие вопросы C/C++ | 2 | 22.07.2017 17:20 |
почему-то таблица "неперспективные товары" пустая получается, не понимаю почему | chet chou | Microsoft Office Access | 1 | 11.05.2017 19:19 |
Почему 0.01+0.06 не 0.07 | SeRhy | JavaScript, Ajax | 2 | 30.05.2015 19:48 |
Здравствуйте ! в чем проблема,почему почему время исполнения операций не работает ? | ion leahu | Помощь студентам | 6 | 23.11.2014 19:36 |