Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.013 c
1-52986
REA
2003-02-10 12:22
2003.02.17
Reset


3-52778
Arman
2003-01-28 16:45
2003.02.17
SQL


7-53316
der
2002-12-15 17:24
2003.02.17
shift+page_down в dbgrid


3-52786
Андрю-ХА!
2003-01-30 18:12
2003.02.17
TDBGrid.SelectedRows


1-53005
Starkom
2003-02-10 15:41
2003.02.17
Восстановление дочерних окон в XP




   Наверх