[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]


Страница 1 из 11
Модератор форума: Spidy, turBO, blitz3d 
Форум мира Blitz3D » Язык Blitz3D » 3D программирование » Нормальные коллизии (как их сделать?)
Нормальные коллизии
NubДата: Четверг, 19.01.2012, 13:00 | Сообщение # 1
ламер
Группа: Пользователи
Сообщений: 37
Награды: 0
Репутация: 0
Статус: Offline
Ну сделал я модель корабля понаставил кубиков настроил а он сквозь них проходит.Ну то есть выступающие края.наверное от того что сфера к полигонам поставил.Как сделать так чтобы коллизии на весь корабль действовали?Заранее спасибо.

Лучшее - враг хорошего. Сделал ты игру, решил улучшить, а потом до ночи сидишь и думаешь, что же ты такого сделал.
 
MishanayCoolДата: Четверг, 19.01.2012, 14:01 | Сообщение # 2
разработчик
Группа: Пользователи
Сообщений: 226
Награды: 11
Репутация: 20
Статус: Offline
Из Help'а blitz3D:
MeshesIntersect (mesh_a,mesh_b )
Параметры
mesh_a - указатель первого объекта типа mesh
mesh_b - указатель второго объекта типа mesh

Описание
Возвращает True, если указанные объекты пересекаются.
Это довольно медленная функция - не используйте ее без острой необходимости.
Это единственная в настоящее время команда в Blitz3D, которая проверяет столкновения по типу: полигон к полигону.

Пример:
Code
Graphics3D 640,480 ,0,2
SetBuffer BackBuffer()            

camera=CreateCamera()            

light=CreateLight()            
RotateEntity light,90,0,0            

Cube=CreateCube():ScaleEntity Cube,3,1,1
PositionEntity Cube,-2,0,10            

Sphere=CreateSphere(32):ScaleEntity Sphere,3,1,1
PositionEntity Sphere,2,0,10            

While Not KeyDown( 1 )            

TurnEntity Cube,1,1,1            
TurnEntity Sphere,-1,-1,-1            

RenderWorld            

; Если пересекаются - выдать сообщение            
If MeshesIntersect(Cube,Sphere)=True Then Text 0,0,"Объекты пересекаются!"            

Flip            

Wend            

End


Чтобы избежать тормозов на сколько это возможно, можно поместить твой корабль в обтекающий меш с минимум количеством полигонов, потом эту обёртку сделать прозрачной(EntityAlpha mesh,0) и прилепить к твоему кораблю(EntityParent обёртка,корабль). Далее столкновения в команде MeshesIntersect уже прописывать с этой невидимой обёрткой. Так будет меньше нагрузка для этой команды из-за меньшего количества полигонов.

Типа так


Но это не вариант, много мороки, представь если столкновение твоего корабля будет фиксироваться с высокополигонарным Тиррейном(Ландшафтом).
Хотя можно прописать сам корабль для тиррейна обычной сферической коллизией, а всё остальное распихать в такие коробки. Короче идти на такие хитрости. Тут больше упор на моделирование чем на кодинг.

Скорей всего многие посоветуют тебе какой нибудь физический движок подключить.


MiniDemo3D - Blitz3D

Сообщение отредактировал MishanayCool - Четверг, 19.01.2012, 15:35
 
Форум мира Blitz3D » Язык Blitz3D » 3D программирование » Нормальные коллизии (как их сделать?)
Страница 1 из 11
Поиск: