IrrlichtФорум

IrrLicht (для новичков) - тупые вопросы (33 стр)

Страницы: 132 33 34 35 36 Следующая »
#480
13:49, 20 сен 2010

Digan
getSceneNodeAndCollisionPointFromRay() или getSceneNodeFromRayBB()  эти функции работаю с лучами а у меня объекты! Не понимаю:(

#481
17:38, 20 сен 2010

Так эти функции возвращают указатель на нод с которым пересекся луч.
Задаешь луч.

irr::core::line3d<f32> ray;

У этого луча можно задать начало и конец.  Например пускаешь луч от персонажа.
Метод getSceneNodeFromRayBB() возвратит первый нод с которым луч пересекся.
Пересечение с лучом считай это столкновение с нодом.

#482
18:07, 20 сен 2010

Может я чего то не догоняю! Допустим я сделаю луч направлю его в сторону объекта А и получится такая ситуация что луч постоянно его будет пересекать! Это для меня не сильно подходит! В irrlicht что нельзя определить соприкосновение двух сеток?

#483
18:15, 20 сен 2010

>Все объекты типа сетка
по подробнее про хитрый тип "сетка" пожалуйста

#484
18:43, 20 сен 2010

Andeksan, простое столкновение между нодами реализуются с помощью селекторов и аниматора.
Если нужно определить столкновение с конкретным нодом, то обычно используется пуск луч. Луч можно пускать все время в одном направлении, я например делал чтобы луч всегда был направлен по направлению движения персонажа.
Если этот луч передать в качестве параметра в метод getSceneNodeFromRayBB(), то при пересечении с каким-нибудь нодом он возвратит указатель на этот нод. Так же можно пускать сразу несколько лучей.

#485
13:31, 21 сен 2010

Digan
вобщем сделал так 

core::line3df rayCast_(IAnimatedMeshSceneNode *node_A, IAnimatedMeshSceneNode *node_obj, f32 distance)
{
  core::line3df line;
  vector3df dist(node_Obj->getPosition() - node_A->getPosition()); 
  dist.normalize();
  dist *= distance;
               //вобщем линия начинается с центра объекта(node_Obj), а заканчивается на каком то
              //расстоянии по напровлению к объекту А
  line=core::line3df(node_Obj->getPosition(), dist); 
  return line;
}


//--
scene::ITriangleSelector* obl_Selector = smgr->createTriangleSelectorFromBoundingBox(node_Obj);
node_Spider->setTriangleSelector(obl_Selector);
  
ISceneNodeAnimatorCollisionResponse *CollisionAnimator =  smgr->createCollisionResponseAnimator(obl_Selector, node_A);
node_A->addAnimator(CollisionAnimator);
obl_Selector->drop();
CollisionAnimator->setGravity(vector3df(0.0f,0.0f,0.0f));

в цикле
{
.....
line3df line = rayCast_(node_Obj, node_A, 80);
 scene::ISceneCollisionManager* collMan = smgr->getSceneCollisionManager();
 scene::ISceneNode * selectedSceneNode = collMan->getSceneNodeAndCollisionPointFromRay(line, intersection, hitTriangle);
if(selectedSceneNode)
{
//отлавил коллизию
}
....
}

При таком варианте постоянно срабатывает коллизия! где я не правильно делаю

#486
23:16, 21 сен 2010

в *.obj нельзя, dae можно. При этом все меши вытаскиваются из кэша. Только вроде надо полный путь к мешам указывать: .......Release/maya.dae#cubeShape. Т.е. в имени указывается не имя объекта, а имя меша(или как это называется).  При этом теряется отностельная ориентация объектов в сцене - надо в Irrlicht по новой всё выставлять=( Также вроде можно все меши разом загрузить - на офиц форуме упомянули про это, а как сделать, не показали.

Поэтому как ты и написал, проще через irrEdit.
Вот пример кода для загрузки. В сцене 2 объекта  ball  и point

    smgr->getMesh("maya.dae");
    IMeshCache *cache = smgr->getMeshCache();


    scene::IAnimatedMesh* m1=cache->getMeshByName("D:/Documents and Settings/gg/My Documents/CodeBlocks/irrlicht/bin/Release/maya.dae#cubeShape");
        IAnimatedMeshSceneNode* n1 = smgr->addAnimatedMeshSceneNode( m1 );
        n1->setMaterialFlag(video::EMF_LIGHTING, false);


    scene::IAnimatedMesh* m2=cache->getMeshByName("D:/Documents and Settings/gg/My Documents/CodeBlocks/irrlicht/bin/Release/maya.dae#ballShape");
        IAnimatedMeshSceneNode* n2 = smgr->addAnimatedMeshSceneNode( m2 );
        n2->setMaterialFlag(video::EMF_LIGHTING, false);
#487
23:56, 21 сен 2010

Andexsan
почему ты создаешь селектор из одного объекта, а потом устанавливаешь его для другого?
Вообще я не понимаю что тебе нужно в сцене. Опиши подробней желаемую сцену -тогда может кодом помогу.
Объект А неподвижен? Объекты к нему приближаются со всех сторон?
Если так то можно пустить несколько лучей небольшой длины из объекта А в разных направлениях. Каждый из лучей обрабатывать вышеприведеными функциями. Если другие объекты пересекуться с одним из лучей метод возвратит указатель на этот объект.

#488
10:33, 22 сен 2010

Там все понятно есть! Объект - А (сетка, 3д модель) к нему двигается другой объект другой формы такого же типа, определить коллизии! В общем коллозии получились но карявые! Вобщем у объекта А есть анимация, меш сдвигается на какое то расстояние, центр на том же месте(он никуда не двигался)! Карявость заключается в том что коллизия происходит с центром объекта А! Как сделать чтобы определять соприкосновения 2-х сеток

#489
11:16, 22 сен 2010

И еще как отключить отсечение граней для всей сцены или для конкретного нода?

#490
12:25, 22 сен 2010

>Как сделать чтобы определять соприкосновения 2-х сеток
надо описать их контур

ты создаешь селектор с параметрами по умолчанию
>smgr->createCollisionResponseAnimator(obl_Selector, node_A);

а надо
>smgr->createCollisionResponseAnimator(obl_Selector, node_A, irr::core::vector3df(x,y,z));
где xyz - радиусы элипсоида в который вписывается твой объект

читай
либо здесь http://www.gamedev.ru/community/irrlicht/articles/?id=2705
либо там http://www.irrlicht.ru/index.php?vm=7.view.22.
на мой взгляд ТАМ по приятнее :)

#491
13:40, 22 сен 2010

Да кстати. В иррлихте столкновение обсчитывается для элипсойда вокруг меша, а не для самих полигонов меша. Хотите более точного обсчета столкновений -используйте дополнительно физ. движки. Повезло еще что в иррлихте хоть какая-та физика есть. В некоторых движках вообще никакой нет.

#492
23:08, 2 окт 2010

Подскажите пожалуйста в чем различия форматов .3ds и .max? и почему везде в движках поддерживаются модели 3ds формата а не мах, ведь мах это родной формат 3dsmax.Расскажите про эти форматы пожалуйста.

#493
21:53, 24 дек 2010

физика? в иррлихте? Где?

#494
7:42, 25 дек 2010

maxfate
в формате 3ds содержатся информация о полигонах и кординаты текстур и иногда бипеды(кости). а в max полигоны, тестуры, все возможные эффекты, частицы, фильтры, источники света... дело в том что не всякая игра может повторить то что может творить 3дмах... естественно сложность чтения и объем файлов отличается... поэтому и придумали экспорты в более легкий формат 3ds который содержит базовые данные о моедли.

Страницы: 132 33 34 35 36 Следующая »
IrrlichtФорум

Тема в архиве.