Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.01 c
14-53232
Nick_N_A
2003-01-18 05:45
2003.02.17
Api & Text


1-52823
sergey_1212
2003-02-07 10:30
2003.02.17
Работа с INI-файлом


14-53207
Рустам
2003-01-31 14:24
2003.02.17
TeamSource


8-53129
Sam Stone
2002-10-30 20:38
2003.02.17
Проблема с перерисовкой


3-52780
Sirus
2003-01-29 07:12
2003.02.17
Как создать, проверить, удалить алиас программно???





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский