Насчёт коллизий

Версия Minecraft
1.7.10
Знаю что в майне любая коллизия entity это AABB, но у мне нужна OBB (ориентированная == имеющая возможность вращаться). Делал ли здесь кто нечто подобное или может быть подскажите в какую сторону двигаться? P.S если кто то знает мод где это можно поглядеть то тоже буду признателен если отпишетесь
 
Последнее редактирование:
Решение
SAT круто да... Когда у тебя 2D объекты. А 'тут все примитивно - две коробки в пространстве' не совсем правда когда эти коробки ориентированные.

В Stalcraft'е я делал реализацию коллизий между OBB и AABB игрока (по факту то же самое что OBB и OBB). Изначально делал через SAT, но в итоге словил не очень приятные проблемы и переделал на convex cast через GJK. Адекватная реализация есть в JBullet, ну или можно написать самим :)
1564649688488.png1564649823559.png

Релевантный пейпер на эту тему

Детектить коллизии относительно понятно как, а вот collision resolution, да еще и с учетом 'ванильного' алгоритма коллизий уже менее тривиально.

После того как ты задетектишь коллизии (неважно каким алгоритмом) у тебя будет пять переменных: время...
5,018
47
783
смотришь в какую сторону ориентирован блок и подставляешь нужную коллизию. Сама коллизия никуда ориентирована быть не может, это просто две точки с координатами
 

tox1cozZ

aka Agravaine
8,455
598
2,892
Сама коллизия никуда ориентирована быть не может, это просто две точки с координатами
Дак он и спрашивает как реализовать свою коллизию с возможностью вращать боксы.
 
5,018
47
783
Зачем ее вращать если можно просто сетать другую в зависимости от условий? какие то костыли
 

tox1cozZ

aka Agravaine
8,455
598
2,892
Какие костыли? Что ты несешь?
Посмотри какая коллизия в других играх. Там не просто куб, а у персонажа есть разные части тела. Например, руки. Ты когда бьешь рукой, то она меняет свое положение, вращается.
 

CumingSoon

Местный стендапер
1,634
12
269
Separating axis theorem подойдёт, так как коробки это выпуклые многогранники. Можно упростить, не делать проверку на параллельных линиях.
А вот как интегрировать это в игру - интересно. Скорее всего, что-нибудь сделать в онАпдейт. Какой-то новый ентити, у которого будет своя проверка на пересечение коробок в онАпдейт.
Можно ещё делать два подхода проверки. Сначала проверять огромные ААББ на столкновение, а затем проверять их ОББ.
 
Зачем ее вращать если можно просто сетать другую в зависимости от условий? какие то костыли
Ну у меня ентити движется и + во время движения вращается у меня коллизия получается динамической. Вот я и хочу получить бокс которому можно градус поворота ентити передавать
 
Separating axis theorem подойдёт, так как коробки это выпуклые многогранники. Можно упростить, не делать проверку на параллельных линиях.
А вот как интегрировать это в игру - интересно. Скорее всего, что-нибудь сделать в онАпдейт. Какой-то новый ентити, у которого будет своя проверка на пересечение коробок в онАпдейт.
Можно ещё делать два подхода проверки. Сначала проверять огромные ААББ на столкновение, а затем проверять их ОББ.
На самом деле это самый нормальный и не костыльный вариант, но для него нужно серьезно заправиться. Хотя похоже иного выбора у меня нет...
 

CumingSoon

Местный стендапер
1,634
12
269
Да ну? Тебе нужно просто делать ААББ таким, чтоб он покрывал всю ОББ, а затем в стандартном методе проверки столкновения реализовать свою. Так можно и ОББ, И ААББ проверять на коллизии (то есть обб-обб, обб-аабб). Таким образом, эта штука хорошо интегрируется в игру. Звучит не слишком сложно, однако тут нужно экспериментировать над производительностью
 
1,193
31
182
Ну ясно, пацаны, парьтесь с жбулетом вместо того, что матешу изучить в некоторых аспектах
ну ясно пацаны парьтесь с либой фолкена вместо того чтобы трансформеры изучить в некоторых аспектах - абсолютно такое же выражение
а в чем проблема эту библиотеку юзать?
 

CumingSoon

Местный стендапер
1,634
12
269
Зачем тянуть библиотеки только ради функции коллизии? Это не библиотека тем более, а физический движок. Слишком как бы оверкильно будет брать себе такое в проект. Ладно бы ты физику серьезную считал, но тут все примитивно - две коробки в пространстве.
 
Сверху