HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > Интерполяция путей
Страницы (2): [1] 2 »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



Интерполяция путей

Такой вопрос, есть у нас условно патч треки - несколько объектов которыми грубо весьма условно нанесен путь для нашего вагончика. Естественно нам нужно его как то сгладить, однако я столкнулся с некоторой особенностью. Всё дело в том что сгладить сами повороты довольно просто, но помимо поворотов есть ещё довольно длинные пути которые к ним так же подмешиваются, и в итоге вагончик едет уже не по рельсам, а начинает как бы заранее съезжать с них в сторону поворота.
https://i.ibb.co/rvvg0z0/lerp.jpg

Как можно решить такую проблему не прибегая к увеличению количества объектов?

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Сообщить модератору | | IP: Записан
Сообщение: 219092

Старое сообщение 26-01-2024 11:17
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34527
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


FiEctro
Если ты мапал в Джеке под ку3 с использоаанием патчей безье, то знаешь, что ответ на твой вопрос: "ДА НЕ КАК!!!".
Впрочем, оно и не нужно. Возьми редактор, который визуализует сглаженный путь, и подгони кривую под рельсы, двигая корнеры. Волатила+джек поддерживают это (path_spline).

__________________

Сообщить модератору | | IP: Записан
Сообщение: 219093

Старое сообщение 26-01-2024 13:28
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



Цитата:
XaeroX писал:
"ДА НЕ КАК!!!".


Ну я знаю как минимум 1 способ не идеальный и костыльный, это пускать объект по неинтерполированной траектории и уже за ним по сглаженной траектории пускать мой вагончик. Примерно так работают некоторые сглаживалки пера планшета. Но может быть кто то из вас знает более элегантное и простое решение.

Цитата:
XaeroX писал:
Впрочем, оно и не нужно. Возьми редактор, который визуализует сглаженный путь, и подгони кривую под рельсы, двигая корнеры. Волатила+джек поддерживают это (path_spline).



Так суть задачи как раз в том чтобы сохранить оригинальный путь.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Сообщить модератору | | IP: Записан
Сообщение: 219095

Старое сообщение 26-01-2024 13:50
- За что?
(_-=ZhekA=-_)
Житель форума

Дата регистрации: Jan 2006
Проживает: Москва
Сообщений: 3890
Возраст: 36

Рейтинг



FiEctro
Если в юнити есть сплайны, то пусти поезд по сплайну

__________________
Kiss my ass if you don't like my Ford!
------------------------------------------
Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.

http://button.moddb.com/download/medium/125531.png

Отредактировано (_-=ZhekA=-_) 26-01-2024 в 13:54

Сообщить модератору | | IP: Записан
Сообщение: 219096

Старое сообщение 26-01-2024 13:52
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34527
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Цитата:
FiEctro писал:
Так суть задачи как раз в том чтобы сохранить оригинальный путь.

Если ты собираешься просто заменить участки пути гладкими кривыми - то это уже не интерполяция. И выглядеть будет так себе, кмк.
Цитата:
FiEctro писал:
Но может быть кто то из вас знает более элегантное и простое решение.

Не знаю. Мне известно только классические решение с интерполяцией, но по факту да, это уже другой путь.

__________________

Сообщить модератору | | IP: Записан
Сообщение: 219097

Старое сообщение 26-01-2024 14:09
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



Цитата:
XaeroX писал:
Волатила+джек поддерживают это (path_spline).


Кстати, а какую формулу безье ты используешь? Ведь их много видов. И насколько это дорого?

Цитата:
(_-=ZhekA=-_) писал:
Если в юнити есть сплайны, то пусти поезд по сплайну


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

Цитата:
XaeroX писал:
Если ты собираешься просто заменить участки пути гладкими кривыми - то это уже не интерполяция. И выглядеть будет так себе, кмк.


Слишком много ручной работы.
Да просто сгладить резкие углы на поворотах. У меня кстати ещё одна идея появилась.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Отредактировано FiEctro 26-01-2024 в 14:57

Сообщить модератору | | IP: Записан
Сообщение: 219098

Старое сообщение 26-01-2024 14:39
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34527
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Цитата:
FiEctro писал:
Кстати, а какую формулу безье ты используешь?

Кубический сплайн.
Цитата:
FiEctro писал:
И насколько это дорого?

Не особо дорого на современных устройствах. Это ж игровой код, он не каждый кадр выполняется. А гранулярити регулируется в настройках объекта, который по этому пути идёт/едет - камера, монстр или трейн. Чем меньше гранулярити, тем меньше расчётов, но и менее гладкий путь.

__________________

Сообщить модератору | | IP: Записан
Сообщение: 219099

Старое сообщение 26-01-2024 15:03
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



Есть такая вот задумка, пустить опять же 2 точки на каком то фиксированном расстоянии по неинтерполированному пути, а потом просто записать положение центра отрезка между этими 2мя точками как отдельный путь. Похожим образом безьешки вроде и строятся, но тут можно будет уже регулировать насколько можно сгладить тот или иной участок задавая длину отрезка на пути внутри каждой ноды без использования отдельных контроллеров. Что думаете?

Т.е. если у нас путь длинный то отрезок у него будет маленький, а следовательно и отклоняться от исходной траектории он не будет, а вот если надо наоборот увеличить сглаживание, увеличиваем длину отрезка. Может я изобретаю велосипед и кто то знает уже что то похожее?

Цитата:
XaeroX писал:
Это ж игровой код, он не каждый кадр выполняется. А гранулярити регулируется в настройках объекта, который по этому пути идёт/едет - камера, монстр или трейн. Чем меньше гранулярити, тем меньше расчётов, но и менее гладкий путь.


Ну да, это можно делать при загрузке. Однако я помню веревки из аранжмента под халфой строились достаточно долго. Там вроде тоже кубические безье использовали.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Отредактировано FiEctro 26-01-2024 в 15:13

Сообщить модератору | | IP: Записан
Сообщение: 219100

Старое сообщение 26-01-2024 15:12
- За что?
Crystallize
Житель форума

Дата регистрации: Jul 2007
Проживает: Новосибирск
Сообщений: 4423
Возраст: 34

Рейтинг



Цитата:
FiEctro писал:
Есть такая вот задумка, пустить опять же 2 точки на каком то фиксированном расстоянии по неинтерполированному пути

И как же это делается?

Сообщить модератору | | IP: Записан
Сообщение: 219101

Старое сообщение 26-01-2024 15:26
- За что?
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



Цитата:
Crystallize писал:
И как же это делается?


Так же как и безье строются - в цикле.


Вот, правда тут поведение 2х точек немного отличается.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Отредактировано FiEctro 26-01-2024 в 15:29

Сообщить модератору | | IP: Записан
Сообщение: 219102

Старое сообщение 26-01-2024 15:27
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34527
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Цитата:
FiEctro писал:
пустить опять же 2 точки на каком то фиксированном расстоянии по неинтерполированному пути, а потом просто записать положение центра отрезка между этими 2мя точками как отдельный путь

Это и есть сглаживание. Путь останется не вполне гладким, будут заметны переходы между корнерами. Чем больше расстояние между точками - тем он сглаженнее, но и тем дальше итоговая траектория будет от оригинальной неинтерполированной.

Добавлено 26-01-2024 в 10:33:

Цитата:
FiEctro писал:
Так же как и безье строются - в цикле.

Безье строятся анатилически, по формуле. Это тебе просто сделали гифку для визуализации, которая на самом деле больше запутывает. Если ты обратил внимание - расстояние между точками не остаётся постоянным, а меняется по некоей формуле. И траектория очень далеко отходит от опорной точки Р1.

Добавлено 26-01-2024 в 10:37:

Цитата:
FiEctro писал:

Ну да, это можно делать при загрузке.

Да не, это вполне можно делать в рантайме. Опять же - в волатиле один и тот же сплайновый путь могут использовать разные объекты с разными гранулярностями:
C++ Source Code:
1
int CSplinePath::BuildPath( int start_node, int max_node_count,
2
float granularity, float default_speed,
3
float default_yaw_speed, float default_fov,
4
vec3_t *array_of_origins, vec3_t *array_of_angles,
5
float *array_of_linear_speeds,
6
float *array_of_angular_speeds,
7
float *array_of_fovs )
8
{
9
  // ...
10
}

__________________

Сообщить модератору | | IP: Записан
Сообщение: 219103

Старое сообщение 26-01-2024 15:37
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



Цитата:
XaeroX писал:
Безье строятся анатилически, по формуле.


Цитата:
XaeroX писал:
Это и есть сглаживание. Путь останется не вполне гладким, будут заметны переходы между корнерами. Чем больше расстояние между точками - тем он сглаженнее, но и тем дальше итоговая траектория будет от оригинальной неинтерполированной.


Существуют уже какие то алгоритмы такого сглаживания? Мне хотя бы названия.

Цитата:
XaeroX писал:

float *array_of_linear_speeds,
float *array_of_angular_speeds,


А зачем хранить ещё угловую скорость?

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Отредактировано FiEctro 26-01-2024 в 15:44

Сообщить модератору | | IP: Записан
Сообщение: 219104

Старое сообщение 26-01-2024 15:41
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34527
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Цитата:
FiEctro писал:
А зачем хранить ещё угловую скорость?

Это для trigger_camera, у неё ещё и угловая скорость интерполируется, так красивее синематика на движке получается. Ну не суть.
Цитата:
FiEctro писал:
Существуют уже какие то алгоритмы такого сглаживания? Мне хотя бы названия.

https://ru.wikipedia.org/wiki/%D0%9...%B2%D1%8B%D1%85

__________________

Сообщить модератору | | IP: Записан
Сообщение: 219105

Старое сообщение 26-01-2024 15:50
-
Crystallize
Житель форума

Дата регистрации: Jul 2007
Проживает: Новосибирск
Сообщений: 4423
Возраст: 34

Рейтинг



Я для рельсы решал задачу когда расстояние между бегунками постоянно. Там можно решить через пересечение окружностей т.е. квадратное уравнение но я решил иначе. Начинаем с перпендикуляра от бегунка 1 к отрезку Б, потом там треугольники считаем, в конце арктангенсом находим угол скользящего отрезка 1-2 к вышеупомянутому перпендикуляру.

Сообщить модератору | | IP: Записан
Сообщение: 219106

Старое сообщение 26-01-2024 15:53
- За что?
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



Цитата:
XaeroX писал:
https://ru.wikipedia.org/wiki/%D0%9...%B2%D1%8B%D1%85


Ну это очень абстрактно, там много разных методов. Конкретнее?

Цитата:
Crystallize писал:
Я для рельсы решал задачу когда расстояние между бегунками постоянно. Там можно решить через пересечение окружностей т.е. квадратное уравнение но я решил иначе. Начинаем с перпендикуляра от бегунка 1 к отрезку Б, потом там треугольники считаем, в конце арктангенсом находим угол 1-2 к перпендикуляру.



Не очень понял. Есть какие то ссылки почитать?

Цитата:
FiEctro писал:
Так же как и безье строются - в цикле.


В целом, а нафига так сложно, строить, а потом хранить? Просто пускать их как обычный поезд и в реалтайме искать центр между ними, лол. Ничего и сглаживать не надо. Остаётся только подобрать коэффициент сглаживания. Например его можно устанавливать в зависимости от угла между путями, ну или ещё как то, хоть вручную. Но надо проверять конечно, может я чего то не учёл.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Отредактировано FiEctro 26-01-2024 в 16:04

Сообщить модератору | | IP: Записан
Сообщение: 219107

Старое сообщение 26-01-2024 15:54
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 16:22. Новая тема    Ответить
Страницы (2): [1] 2 »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > Интерполяция путей
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024