Форумы на Наша-Life
Home user CP  
Календарь событий Найти других пользователей Часто задаваемые Вопросы Поиск  
Автор
Тема
Создать Новую Тему    Ответить
Breever
(Добываю фероподы из мирмидонта)

Зарегистрирован: Jun 2009
Проживает: Россия/Красноярск
Написал: 95 сообщений

Оценка: 3 Votes 3 чел.

Коллизии у игрока
Сообщение #961098
Что-то чахнет раздел кодинга, никто ничего не пишет
В общем, что я хотел:

Пытаюсь сделать коллизии для игрока через хитбоксы, а не через заранее установленные боксы.
Пишу:
code:
CollisionProp()->SetSurroundingBoundsType (USE_HITBOXES);


И комментирую все строчки в player.cpp и baseplayer_shared.cpp, которые устанавливают какие-либо коллизион-боксы.

Например, в пост-финк комментируется следующее:
code:
VPROF_SCOPE_BEGIN( "CBasePlayer::PostThink-Bounds" );
if ( GetFlags() & FL_DUCKING )
{
SetCollisionBounds( VEC_DUCK_HULL_MIN, VEC_DUCK_HULL_MAX );
}
else
{
SetCollisionBounds( VEC_HULL_MIN, VEC_HULL_MAX );
}
VPROF_SCOPE_END();


Но что делал что-то, что не делал - все равно одно и то же получаю, используются стандартные коллизии, а не от модели игрока.

Ну и следовательно вопросы:
1) как все-таки сделать коллизии через хитбоксы модели игрока??
2) Или хотя бы - где устанавливаются те самые ограничительные боксы, по которым идут коллизии??
Не существует границ, есть лишь препятствия
Old Post 21-04-2010 17:05
Breever отсутствует Посмотреть данные 'Breever' Отправить Приватное Сообщение для 'Breever' Посетить домашнюю страничку Breever Найти другие сообщения 'Breever' Добавить Breever в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
manJak
(маппер-теоретик)

Зарегистрирован: Feb 2006
Проживает: Mother Russia/Moscow
Написал: 2953 сообщений

Оценка: 66 Votes 66 чел.

Developer Старожил 
Сообщение #961102
1) Всё куда сложнее) В теории нужно создать для каждого хитбокса keyframed физобъект (эт в терминологии хавока, а в терминологии сорса вроде бы shadow) и обновлять их позиции сообразно костям игрока.. Но это теория. На практике же оно есть у проп_динамика и ходуль страйдера, смотри там.
2) Я полагаю, что VEC_HULL_MIN, VEC_HULL_MAX, VEC_DUCK_HULL_MIN и VEC_DUCK_HULL_MAX.
Old Post 21-04-2010 17:21
manJak отсутствует Посмотреть данные 'manJak' Отправить Приватное Сообщение для 'manJak' Найти другие сообщения 'manJak' Добавить manJak в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
Breever
(Добываю фероподы из мирмидонта)

Зарегистрирован: Jun 2009
Проживает: Россия/Красноярск
Написал: 95 сообщений

Оценка: 3 Votes 3 чел.

Сообщение #961159
Цитата:
1) Всё куда сложнее) В теории нужно создать для каждого хитбокса keyframed физобъект (эт в терминологии хавока, а в терминологии сорса вроде бы shadow) и обновлять их позиции сообразно костям игрока.. Но это теория. На практике же оно есть у проп_динамика и ходуль страйдера, смотри там.

Окей, спс. я еще не мог понять почему описываются некие Shadow, хотя к теням сам код не имеет отношения

Цитата:
2) Я полагаю, что VEC_HULL_MIN, VEC_HULL_MAX, VEC_DUCK_HULL_MIN и VEC_DUCK_HULL_MAX.

Я тоже так думал, но почему-то при комментировании этих строчек результат остается тем же
Не существует границ, есть лишь препятствия
Old Post 22-04-2010 08:46
Breever отсутствует Посмотреть данные 'Breever' Отправить Приватное Сообщение для 'Breever' Посетить домашнюю страничку Breever Найти другие сообщения 'Breever' Добавить Breever в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
manJak
(маппер-теоретик)

Зарегистрирован: Feb 2006
Проживает: Mother Russia/Moscow
Написал: 2953 сообщений

Оценка: 66 Votes 66 чел.

Developer Старожил 
Сообщение #961168
> при комментировании этих строчек результат остается тем же
Конечно он остаётся тем же, потому что надо не строчки комментировать, а смотреть определение VEC_HULL_MIN, VEC_HULL_MAX итд. В конечном счёте менять нужно g_DefaultViewVectors в shared/gamerules.cpp. Ну или если у тебя свои геймрулсы, то переопределить в них const CViewVectors *GetViewVectors() const.
Old Post 22-04-2010 10:55
manJak отсутствует Посмотреть данные 'manJak' Отправить Приватное Сообщение для 'manJak' Найти другие сообщения 'manJak' Добавить manJak в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
Barnacle
(Монтировкой не бить!)

Зарегистрирован: Jun 2008
Проживает: Российская Федерация/Кемеровская обл./Юрга
Написал: 7106 сообщений

Оценка: 83 Votes 83 чел.

Developer Старожил Юморист 
Сообщение #961181
Так может лучше использовать USE_BEST_COLLISION_BOUNDS?

Вот кстати ссылки, не знаю помогут ли они вам:
Player HULL vs HIT BOXES
CollisionProperty
Old Post 22-04-2010 13:07
Barnacle отсутствует Посмотреть данные 'Barnacle' Отправить Приватное Сообщение для 'Barnacle' Найти другие сообщения 'Barnacle' Добавить Barnacle в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
manJak
(маппер-теоретик)

Зарегистрирован: Feb 2006
Проживает: Mother Russia/Moscow
Написал: 2953 сообщений

Оценка: 66 Votes 66 чел.

Developer Старожил 
Сообщение #961198
Barnacle, не, collision bounds это совсем не то))
Old Post 22-04-2010 14:45
manJak отсутствует Посмотреть данные 'manJak' Отправить Приватное Сообщение для 'manJak' Найти другие сообщения 'manJak' Добавить manJak в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
 
Barnacle
(Монтировкой не бить!)

Зарегистрирован: Jun 2008
Проживает: Российская Федерация/Кемеровская обл./Юрга
Написал: 7106 сообщений

Оценка: 83 Votes 83 чел.

Developer Старожил Юморист 
Сообщение #961202
Блин, я балбес. Это ведь QPhysics, а не VPhysics?
Old Post 22-04-2010 15:06
Barnacle отсутствует Посмотреть данные 'Barnacle' Отправить Приватное Сообщение для 'Barnacle' Найти другие сообщения 'Barnacle' Добавить Barnacle в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
manJak
(маппер-теоретик)

Зарегистрирован: Feb 2006
Проживает: Mother Russia/Moscow
Написал: 2953 сообщений

Оценка: 66 Votes 66 чел.

Developer Старожил 
Сообщение #961216
Квакофизика? о_о Не видел такой в сорсе..
А вообще по второй ссылке которую ты дал вполне хорошо описано, что такое collision bounds и с чем их едят)
Old Post 22-04-2010 16:09
manJak отсутствует Посмотреть данные 'manJak' Отправить Приватное Сообщение для 'manJak' Найти другие сообщения 'manJak' Добавить manJak в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
Alf-Life II
(Senior Member)

Зарегистрирован: Mar 2008
Проживает: Россия/
Написал: 2097 сообщений

Оценка: 51 Votes 51 чел.

Сообщение #961273
Цитата:
Оригинальное сообщение от manJak
Квакофизика? о_о Не видел такой в сорсе..

Эмм... А как же гильзы там всякие?
Запрещается смотреть солдатам в глаза. Наносить ущерб собственности Альянса. Убивать комбайнов. Всегда носите при себе документы. Не поднимать шума после шести. И до шести, кстати, тоже.
Old Post 22-04-2010 18:57
Alf-Life II отсутствует Посмотреть данные 'Alf-Life II' Отправить Приватное Сообщение для 'Alf-Life II' Найти другие сообщения 'Alf-Life II' Добавить Alf-Life II в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
manJak
(маппер-теоретик)

Зарегистрирован: Feb 2006
Проживает: Mother Russia/Moscow
Написал: 2953 сообщений

Оценка: 66 Votes 66 чел.

Developer Старожил 
Сообщение #961318
Alf-Life II
Трассировка лучей, не более) См. C_LocalTempEntity::Frame().
Old Post 22-04-2010 20:41
manJak отсутствует Посмотреть данные 'manJak' Отправить Приватное Сообщение для 'manJak' Найти другие сообщения 'manJak' Добавить manJak в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
Barnacle
(Монтировкой не бить!)

Зарегистрирован: Jun 2008
Проживает: Российская Федерация/Кемеровская обл./Юрга
Написал: 7106 сообщений

Оценка: 83 Votes 83 чел.

Developer Старожил Юморист 
Сообщение #961444
Цитата:
Оригинальное сообщение от manJak
Квакофизика? о_о Не видел такой в сорсе..


Ну, как-то так: Vphysics & Qphysics.

===========================

А теперь по теме. Stelly написал здесь, что нужно добавить CollisionProp()->SetSurroundingBoundsType( USE_HITBOXES ); в функцию Spawn() (и ещё кое-что подправить), если же это работать не будет, то нужно добавить флаг FSOLID_CUSTOMRAYTEST (я так понимаю, что можно ещё добавить и FSOLID_CUSTOMBOXTEST, как у Страйдера). Но сколько не пытался так сделать - используется всё тот же hull. Видимо что-то делаю не так.
Old Post 23-04-2010 17:10
Barnacle отсутствует Посмотреть данные 'Barnacle' Отправить Приватное Сообщение для 'Barnacle' Найти другие сообщения 'Barnacle' Добавить Barnacle в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
manJak
(маппер-теоретик)

Зарегистрирован: Feb 2006
Проживает: Mother Russia/Moscow
Написал: 2953 сообщений

Оценка: 66 Votes 66 чел.

Developer Старожил 
Сообщение #961529
Эмм.. Ну во-первых таких слов как QPhysics или QPhys нет даже в исходниках сорса 2003 года выпуска угона. Не знаю откуда в той статье это всё понабрали, может из сорцов хл1, может из кваки.

Теперь что касается COLLISION_BOUNDS. Ключевое слово - bounds, границы коллижна же. Это границы, окружающие субъект столкновения, будь то полигональный физобъект, кучка хитбоксов или OBB.. Служат они для грубых предварительных тестов столкновений.
Пример: Толпа зомбаков (штук 20), 4 игрокока с дробашами, которые от них увлечённо отстреливаются. Какая будет нагрузка на сервер, если каждый луч нужно было бы проверить на пересечение с каждым хитбоксом?) Хитбоксов на зомбка - скажем 16, "пуль" на один выстрел - скажем 8. 20*16*4*8=10240 тестов "OBB-луч", если все разом пальнут) А если дробинки ещё и халлами сделать, как в хл2, то тесты уже будут OBB-AABB. x.x
Тут на помощь и приходят баундсы) У каждого зомбика есть бокс, в который заведомо помещаются все его хитбоксы при любых анимациях (или же этот бокс рассчитывается в каждом кадре). Теперь нужно сначала сделать 20*4*8 тестов, а потом уже проверять по-хитбоксово для каждого зомбика, коллижн баундсы которого попали "под обстрел")
То же самое действует и при тестах "физобъект-физобъект".

Короче, к чему я это всё? А к тому, что баундсы не задают физицскую форму объекта.
Old Post 24-04-2010 10:57
manJak отсутствует Посмотреть данные 'manJak' Отправить Приватное Сообщение для 'manJak' Найти другие сообщения 'manJak' Добавить manJak в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
Breever
(Добываю фероподы из мирмидонта)

Зарегистрирован: Jun 2009
Проживает: Россия/Красноярск
Написал: 95 сообщений

Оценка: 3 Votes 3 чел.

Сообщение #961580
Цитата:
10240 тестов "OBB-луч", если все разом пальнут

Да я думаю это не такая уж и большая задача. Ведь тот же физ-движок перебирает столкновения каждого объекта с каждым на каждом кадре.

Цитата:
Короче, к чему я это всё? А к тому, что баундсы не задают физицскую форму объекта.

Ну это понятно, обработка физики ведь идет по физ. модели.

В общем, по сути темы: как я понял, для того, чтобы создать коллизии по хитбоксам, нужно:
1) Создать объект-член CBoneFollowerManager
2) Переопределить наследуемую от CBaseEntity функцию CreateVPhysics, которая вызывает InitBoneFollowers (не обязательно, можно хоть инициализировать их в CreateVPhysics, это нужно для доп. пересоздания в OnRestore)
3) Для инициализации в InitBoneFollowers нужен дополнительный строковый массив, который является перечислением тех костей модели, к которым прикреплены хитбоксы. Проинциализировать наш объект CBoneFollowerManager.
4) В Think'е нужно лишь вызывать метод Update для CBoneFollowerManager.
5) В спавне вызвать CreateVPhysics + установить флаги USE_HITBOXES, FSOLID_CUSTOMRAYTEST, FSOLID_CUSTOMBOXTEST там, где нужно.

При этом нам не нужно трогать Хулл-бокс у модели игрока, ведь хитбоксы будут иногда выходить из него, и давать нужные коллизии.

Однако, что-то я сомневаюсь, что эта последовательность действий к чему-то приведет: ведь мы хотя бы даже как-нибудь не регистрируем объект класса CBoneFollowerManager в физ-системе.
Не существует границ, есть лишь препятствия

Поправил Breever 24-04-2010 в 17:10

Old Post 24-04-2010 16:55
Breever отсутствует Посмотреть данные 'Breever' Отправить Приватное Сообщение для 'Breever' Посетить домашнюю страничку Breever Найти другие сообщения 'Breever' Добавить Breever в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
manJak
(маппер-теоретик)

Зарегистрирован: Feb 2006
Проживает: Mother Russia/Moscow
Написал: 2953 сообщений

Оценка: 66 Votes 66 чел.

Developer Старожил 
Сообщение #961592
> физ-движок перебирает столкновения каждого объекта с каждым на каждом кадре
А вот и нет) Он во-первых составляет "острова симуляции" - группы потенциально взаимодействующих объектов, во-вторых находит пересечение тех самых баундсов, и только потом - точное нахождение пересечений полигональных объектов.

> как я понял, для того, чтобы создать коллизии по хитбоксам, нужно...
Ну тут ты сам уже должен шишки набивать. Я только направление подсказал, сам же я такого не делал.
Old Post 24-04-2010 17:57
manJak отсутствует Посмотреть данные 'manJak' Отправить Приватное Сообщение для 'manJak' Найти другие сообщения 'manJak' Добавить manJak в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
Barnacle
(Монтировкой не бить!)

Зарегистрирован: Jun 2008
Проживает: Российская Федерация/Кемеровская обл./Юрга
Написал: 7106 сообщений

Оценка: 83 Votes 83 чел.

Developer Старожил Юморист 
Сообщение #961724
Цитата:
Оригинальное сообщение от manJak
Короче, к чему я это всё? А к тому, что баундсы не задают физицскую форму объекта.


Да-да, это всё понятно, я просто подумал, что то "шаманство" превратит hull в динамический, как это происходит с absbox'ом. FAIL.

Цитата:
Оригинальное сообщение от Breever
В общем, по сути темы: как я понял, для того, чтобы создать коллизии по хитбоксам, нужно:
<...>

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


Хотел это потом написать, но опоздал. Да, это работает (здесь thirdperson, vcollide_wireframe "1"). Страйдеры, как впрочем и обычные prop_physics, вполне нормально реагируют на "черепушку" персонажа головой также можно ходить и разбивать деревянные ящики .
Правда и без багов не обошлось. Коллизия "отстаёт" от игрока при движении (thirdperson_platformer "1"), а также спокойно проходит через браши и prop_static'и и prop_physics'и с флагом "Motion disable". Но это всё ерунда, при желании можно и это поправить.

ЗЫ Ссылка для потомков.

Форум работает ужасно.

Поправил Barnacle 27-04-2010 в 07:55

Old Post 27-04-2010 07:44
Barnacle отсутствует Посмотреть данные 'Barnacle' Отправить Приватное Сообщение для 'Barnacle' Найти другие сообщения 'Barnacle' Добавить Barnacle в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
Все время в GMT . Сейчас 09:56.
Создать Новую Тему    Ответить

Быстрый ответ
Ваше Имя:
Хотите Зарегистрироваться?
Ваш Пароль:
Забыли свой Пароль?
Вы можете оставлять свои комментарии анонимно, просто введя свои имя и оставив пустым поле пароля.
Ваш ответ:

[проверить размер]
[транслит в win] | [?]
[русская клавиатура]

Дополнительно: Подтверждение по E-Mail


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

Правила форума:
Создание Тем не разрешено
Создание Сообщений разрешено
Создавать Вложения не разрешено
Редактирование Сообщений не разрешено
Коды HTML запрещены
Коды форума разрешены
Смайлики разрешены
Коды [IMG] запрещены