[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Пример FPS
ninthДата: Четверг, 12.02.2009, 15:29 | Сообщение # 1
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
Пример управления FPS + коллизии
Взято с родного форума панды, поэтому комменты на английском, если что-то непонятно - спрашивайте
Прикрепления: simple-fps.zip (97.4 Kb)
 
Dimon3DДата: Четверг, 12.02.2009, 16:41 | Сообщение # 2
Полковник
Группа: Проверенные
Сообщений: 202
Награды: 1
Репутация: 4
Статус: Offline
А можно поподробнее объяснить, что происходит в подпрограмме createCollisions этого примера. Что за BitMask32...
Вроде идет описание сферы, а потом опять какие-то лучи(ray)?
 
ninthДата: Четверг, 12.02.2009, 22:55 | Сообщение # 3
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
Да, основной коллидер - это сфера. Луч в этом примере используется для прыжка - с помошью него определяется расстояние до пола. BitMask - используется для указания какие поверхности с какими коллидятся.
 
Dimon3DДата: Пятница, 13.02.2009, 07:06 | Сообщение # 4
Полковник
Группа: Проверенные
Сообщений: 202
Награды: 1
Репутация: 4
Статус: Offline
if z > highestZ and entry.getIntoNode().getName() == "Cube":
Это, что-бы определить объект столкновения, нужно слазить в файл модели (в данном случае 'Level'), и найти там нужную группу вертексов ("Cube")? Да уж...

Добавлено (13.02.2009, 07:06)
---------------------------------------------
Почему при увеличении радиуса CollisionSphere, ее начинает тянуть в сторону? Тоже самое происходит при изменении масштаба self.node

 
ninthДата: Пятница, 13.02.2009, 08:16 | Сообщение # 5
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
1. Да. Можешь считать это плюшкой панды. ведь благодаря этому можно нарулить каркас логики прямо в трёхмерном редакторе, присвоив объектам определённые имена и проверяя это потом из программы.
2. Ползёт в сторону наклона?
 
ninthДата: Пятница, 13.02.2009, 08:44 | Сообщение # 6
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
Получается следующая фигня:
сфера большая, поэтому приподнимает игрока над полом выше, чем рассчитывал автор при проверке расстояния до пола - программа пытается смещать игрока вниз, считая, что он сейчас в прыжке и ему надо опуститься на пол, сфера этого не даёт делать и соскальзывает по полу в сторону даже минимального наклона.
 
ninthДата: Пятница, 13.02.2009, 09:06 | Сообщение # 7
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
Долбится только там, где ниши? Это построение уровня такое - где-то за что-то цепляется. В стандартном варианте, если подпрыгнуть около них и нажать вперёд - та же фигня
-----------------------------------
А вообще не рекомендуется использовать для коллизий ту же геометрию, что и для визуализации - разработчики советуют делать отдельную упрощённую геометрию для этих целей, т.к. использование относительно высокополигонального уровня для детекции столкновения вызовет лишнюю нагрузку
 
ninthДата: Пятница, 13.02.2009, 09:18 | Сообщение # 8
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
Объекты с одинаковой маской коллидятся, с разной - игнорят столкновения друг с другом. Вообще, в данном примере эти строки необязательны - видимо выдернуты из какого-то другого примера
 
ninthДата: Пятница, 13.02.2009, 10:40 | Сообщение # 9
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
можно оставить только cn.setIntoCollideMask(BitMask32.allOff())
это сообщается о том, что в луч коллидится нельзя - т.е. в отличае от остальных коллижн объектов луч может сам проверять коллизию, но в него врезаться нельзя, а т.к. маска не стоит коллизия пытается его со сферой столкнуть
 
Dimon3DДата: Пятница, 13.02.2009, 11:48 | Сообщение # 10
Полковник
Группа: Проверенные
Сообщений: 202
Награды: 1
Репутация: 4
Статус: Offline
То есть происходит только проверка на сам факт столкновения, а реакции на это столкновеие нет. Так ?
 
ninthДата: Пятница, 13.02.2009, 12:00 | Сообщение # 11
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
Да. Оно пытается проверить столкновение, потом соображает, что это луч и с ним столкнуться нельзя, после чего выдаёт соответствующее ругательство.
Так что ставь только cn.setIntoCollideMask(BitMask32.allOff()) что указывает что не надо проходить проверку на коллизию в луч. Это не критично, но будет являться хорошим тоном, а если у тебя множество лучей, то ещё и ускорит просчёт
 
Dimon3DДата: Пятница, 13.02.2009, 15:54 | Сообщение # 12
Полковник
Группа: Проверенные
Сообщений: 202
Награды: 1
Репутация: 4
Статус: Offline
При нажатии на кнопку выполняется:

def getE():

for i in range(queue.getNumEntries()):
entry = queue.getEntry(i)
textObject.setText(str(entry))

Что означает эта информация?

Прикрепления: 5300405.jpg (24.9 Kb)
 
ninthДата: Пятница, 13.02.2009, 16:00 | Сообщение # 13
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
А где это ты взял - глянуть бы на весь код?
Но предполагаю
цикл для i в диапазоне очереди коллизий
получаем коллизию номер i
выводим о ней инфу

Или тебе нужно знать что за инфа выводится?

 
Dimon3DДата: Пятница, 13.02.2009, 16:06 | Сообщение # 14
Полковник
Группа: Проверенные
Сообщений: 202
Награды: 1
Репутация: 4
Статус: Offline
да. Что за инфа
 
ninthДата: Пятница, 13.02.2009, 16:14 | Сообщение # 15
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
коллидящиеся обекты
точка контакта в координатах тела "in"
вектор нормали к поверхности в точке контакта
глубина проникновения тел
 
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск: