Текущий архив: 2003.02.17;
Скачать: CL | DM;
ВнизПересечения 3D объектов Найти похожие ветки
← →
pasha676 (2002-09-13 09:28) [0]Вот туточки покрутил GLScene, понравилось. Очень понравилась фишка по коллизиям трехмерных объектов. Особенно простота с которой это организуется. Можно ли пересечение трехмерных объектов отслеживать в DXDelphi примерно такими же встроенными средствами?
Вариант просчитывать баундингбоксы и их пересечения вручную не предлагать. Мне проще всю прогу под GLScene переписать чем таким гемором заниматься.
← →
Sapersky_ (2002-09-13 11:32) [1]DXDelphi - это DelphiX? Тогда никак, я же писал уже - он контролирует только 2D-графику, а для 3D делает только инициализацию (тоже немало, впрочем :)).
Но не всё так страшно :) - в самом D3DRM есть функция RayPick, задаёшь луч и он находит все пересечения с объектами. Причём функции можно задать, чтобы работала либо с б.боксами, либо проверяла точно.
← →
Sapersky_ (2002-09-13 13:32) [2]Вот, я даже пример нашёл:
function IsCollided(SceneFrame, PickFrame : IDirect3DRMFrame3): IDirect3DRMFrame3;
// sceneframe - фрейм сцены
// pickframe - фрейм объекта, который проверяется на столкновение с другими
// возвращаем фрейм, с кот. столкнулись или nil, если столкновения нет
Var ray : TD3DRMRay;
pickarr : IDirect3DRMPicked2Array;
pickdesc : TD3DRMPickDesc2;
dist : Single;
farr : IDirect3DRMFrameArray;
visual : IDirect3DRMVisual;
up,pos,dir : TD3DVector;
begin
Result:=nil;
PickFrame.GetPosition(SceneFrame,pos);
PickFrame.GetOrientation(SceneFrame,dir,up);
ray.dvDir:=dir;
ray.dvPos:=pos;
SceneFrame.RayPick(SceneFrame,ray,D3DRMRAYPICK_IGNOREFURTHERPRIMITIVES,pickarr);
pickarr.GetPick(0,visual,farr,pickdesc);
If visual<>nil then begin
dist:=Sqrt(Sqr(pos.x-pickdesc.dvPosition.x)+Sqr(pos.y-pickdesc.dvPosition.y)+
Sqr(pos.z-pickdesc.dvPosition.z));
If dist<1 then farr.GetElement(farr.GetSize-1,Result);
// если расстояние до грани объекта,
// в которую мы воткнулись <1,
// произошло столкновение
end;
visual:=nil;
farr:=nil; pickarr:=nil;
end;
← →
pasha676 (2002-09-13 14:00) [3]Пасибо. Чичас некогда, сдача проекта (мое пермементное состояние в последнее время :(), потом покручу.
Страницы: 1 вся ветка
Текущий архив: 2003.02.17;
Скачать: CL | DM;
Память: 0.44 MB
Время: 0.009 c