Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2003.02.17;
Скачать: [xml.tar.bz2];

Вниз

Пересечения 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.01 c
1-52820
ltexcimer
2003-02-06 20:03
2003.02.17
Позиция в строке.


1-53035
Sergei
2003-02-06 12:52
2003.02.17
Технология IDL


1-53075
Yrtimd
2003-02-06 20:39
2003.02.17
Разбор


1-53078
UDS
2003-02-06 20:43
2003.02.17
Задержка выполнения программного кода (???)


1-52922
SergeySS
2003-02-08 20:47
2003.02.17
Need Help!!!!!!!!!!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский