Меня опередили, попытаюсь пояснить тогда.
Я делал как-то так:
;=======Коллизии=======
Const HeroType = 1 ;Персонаж
Const FloorType = 2 ;Любая поверхность по которой нужно ходить
Const AllObjectType = 3 ;Стены и всё большое и статичное
...........какойтокод...........
Graphics3D 1920,1080,32,2
...........какойтокод...........
;=====================Игрок=============================
player=CreateSphere()
. . . . . .
EntityRadius player,1.8,1.8
EntityType player,HeroType
map=LoadMesh()
. . . . . .
EntityType map,player,2,AllObjectType
;====================Коллизи============================
Collisions HeroType,FloorType,2,3 ;Коллизия персонажа с полом,
Collisions HeroType,AllObjectType,2,2 ;со стенами.
1) Надо задать каждому объекту с кем он может сталкиваться.
2) Определить тип (формы) столкновений, они фиксированные.
3) И реакция на столкновение: остановка, скольжение.
В твоём случае, твоя камера это мой
HeroType, а комната
AllObjectType.
Для стен и пола делал отдельно, что бы не было конфликта.
Если у тебя комната один меш, то её лучше разбить на части.
Я уже подзабыл, но вроде для простого столкновения со статичным достаточно камера—>стены.
А для сложного нужно в обе стороны (как у меня в коде). Например открытая дверь толкала персонажа (а может я напутал).
Справка на русском Blitz3D_help_русский.zip
Collisions src_type,dest_type,method,response
Параметры
src_type - тип объекта, который будет проверяться на столкновения.
dest_type - тип объекта, с которым будут обрабатываться столкновения.
method - метод определения столкновений.
1: столкновения типа эллипсоид-к-эллипсоиду
2: столкновения типа эллипсоид-к-полигону
3: столкновения типа эллипсоид-к-паралелепипеду
response - как будет вести себя объект при столкновении.
1: остановка
2: скольжение1 - столкновение с полным скольжением
3: скольжение2 - скольжение с предотвращением скатывания с наклонов
|