Войти
IrrlichtФорум

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

Страницы: 131 32 33 3436 Следующая »
#465
17:39, 23 авг. 2010

Скажите, пожалуйста, irrlicht поддерживает бленд-анимацию?


#466
19:27, 23 авг. 2010

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

>В общих словах нужно сначала сохранить состояние сцены, потом пересоздать устройство.

А ещё можно разрешить пользователю менять размеры окна самостоятельно.
IrrlichtDevice::setResizeable(). Эта ф-ция разрешает изменять размер окна рендеринга.
В мешвиевере она применяется так:

  if (Device == 0)
    return 1; //не удалось создать выбранный драйвер.

  Device->setResizable(true);

>Скажите, пожалуйста, irrlicht поддерживает бленд-анимацию?
Пока считается, что нет. Приходится людям анимировать отдельные части тела и собирать их потом воедино.

#467
22:59, 23 авг. 2010

А почему "пока считается, что нет"?
Возможно будет поддержка в будущем?

#468
16:59, 26 авг. 2010

Интересно почему при клике на нод и обработки клика следующей строчкой

SelectedNode = CollMan->getSceneNodeFromScreenCoordinatesBB(Device->getCursorControl()->getPosition(),0,true); 
Иногда выбранным нодом стает камера. Хотя нод довольно массивный и промахнуться по нему невозможно. Это баг движка или что-то у меня в коде не так? Кстати и при клике на гуи выбранным нодом стает камера.

#469
16:05, 27 авг. 2010

>Возможно будет поддержка в будущем?
Как звёзды сложатся....

>Иногда выбранным нодом стает камера.
В смысле становится.

У вашей камеры создан селектор треугольников? 100% создан.
Скорее всего большой габаритный контейнер камеры.
1. Способ. Брать глубину(старт луча) > размеров габаритного контейнера камеры.
2. Способ как в примере Collision. Рекомендую. Там определены 3 флага для всех нодов:

enum
{
        // Я использую этот ISceneNode ID для идентификации нода
        //который НЕ может быть выбран
        //getSceneNodeAndCollisionPointFromRay()
        ID_IsNotPickable = 0,

        // Я использую этот флаг ISceneNode IDs чтобы
        // указать нод, который может быть выбран.
        IDFlag_IsPickable = 1 << 0,

        // может быть выбран И ПОДСВЕЧЕН
        IDFlag_IsHighlightable = 1 << 1
};

Ну и далее:

        scene::ICameraSceneNode* camera =
                smgr->addCameraSceneNodeFPS(0, 100.0f, .3f, ID_IsNotPickable, 0, 0, true, 3.f);

т.е. камера указана как объект который НЕ может быть выбран.

Ф-ции луча флаг тоже надо указать:

                scene::ISceneNode * selectedSceneNode =
                        collMan->getSceneNodeAndCollisionPointFromRay(
                                        ray,
                                        intersection, // Позиция столкновения
                                        hitTriangle, // Треугольник с которым произошло столкновение
                                        IDFlag_IsPickable, // Указать какие ноды могут быть выбраны
                                                        // а какие не могут
                                        0);

#470
22:09, 27 авг. 2010

Спасибо за подсказку по флагу в параметре. Раньше у меня там стоял просто ноль. Думал, что за bitMask, а в документацию заглянуть не догадался.
Но я оставил все таки метод getSceneNodeFromScreenCoordinatesBB(). Им попроще как-то выбирать ноды какая бы не была камера, и не надо явно определять начало луча.
И да. Селектора камеры у меня не было и нет.

#471
12:48, 28 авг. 2010

>И да. Селектора камеры у меня не было и нет.

Тьфу запарился. Надо было спросить установлен ли аниматор столкновений. Просто у меня камера в подобной ситуации не выделялась. Возможно размерность сцены и элементов были другие.
Ну вот для примера, как устанавливается аниматор столкновения камере в 7 туториале(где про столкновения):

  scene::ITriangleSelector* selector = 0;

  if (q3node)
  {
    q3node->setPosition(core::vector3df(-1350,-130,-1400));

    selector = smgr->createOctreeTriangleSelector(
        q3node->getMesh(), q3node, 128);
    q3node->setTriangleSelector(selector);
    //Мы пока что не закончили с этим селектором, 
    //поэтому нельзя освободить его переменную прямо сейчас.
  }

scene::ICameraSceneNode* camera =  
    camera = smgr->addCameraSceneNodeFPS(0,100.0f,300.0f); 

  scene::ISceneNodeAnimator* anim = 
    smgr->createCollisionResponseAnimator(
    selector, camera, core::vector3df(30,50,30),
    core::vector3df(0,-3,0),
    core::vector3df(0,50,0));

  camera->addAnimator(anim);

  anim->drop();
  selector->drop();

В принципе, камера и не имеет к треугольникам никакого отношения, столкновение с ней фиксируется по радиусу элипса. Но хоть бы аниматор столкновений должен быть? Или по лучу камера выделяется и без аниматора столкновений?

#472
16:25, 28 авг. 2010

Мне в редакторе пока столкновения не нужны. Ни аниматоров ни селекторов нет. Просто ,пока не поставил флаг, по клику мыши выделялась камера т.к. это тоже нод.
Могу для убедительности привести код обработчика клика мыши:)

case EMIE_LMOUSE_PRESSED_DOWN :
{
   LMouseButtonDown = true;
  SelectedNode = CollMan->getSceneNodeFromScreenCoordinatesBB(Device->getCursorControl()->getPosition(),IDFlag_IsPickable,true); 
   if(SelectedNode)
  {
     initialCursorPosition = Device->getCursorControl()->getPosition(); 
     initialObjectPosition = CollMan->getScreenCoordinatesFrom3DPosition(SelectedNode->getAbsolutePosition(), Manager->getActiveCamera());
     menuBar->setSelectedNode(SelectedNode);
   }


}
break;

#473
17:23, 28 авг. 2010

Может быть в вашем случае луч фиксирует столкновение не с мешем состоящим из треугольников, а с габаритным контейнером модели. И поэтому корректно возвращает тот нод, с которым реально произошло столкновение.
А для того, чтобы получить ТРЕУГОЛЬНИК, с которым произошло столкновение селектор видимо всё же нужен.
Для моделей тоже нужно было создавать селекторы в 7 туториале:

  //Теперь создадим селекор треугольников для 
  //персонажа. Селекор должен знать с каким 
  //анимированным узлом он связан, тогда он 
  //скорректирует себя по необходимости.
  selector = smgr->createTriangleSelector(node);
  node->setTriangleSelector(selector);
  selector->drop(); //Мы закончили с этим селекором, так что освобождаем его.

и так с каждой моделью. Т.е. не создавая селекторы можно получить столкновение с моделью по её габаритному контейнеру(боундингбоксу). Но чтобы получить столкновение конкретно с треугольником меша без селектора не обойтись.
А иначе зачем бы его было нужно создавать.

#474
23:11, 28 авг. 2010

В данном случае мне нужно было пока только возможность выбирать объекты мышью и возможность перемещать, вращать и масштабировать ноды на карте. Это уже успешно достигнуто без селекторов. Проблема с выделением камеры так же решена с помощью флага.

Теперь мне видимо предстоит написание своего МешВьювера.

#475
14:15, 17 сен. 2010

Сцена в модели состоит из 3-х объектов. Экспортнул её в *.obj. Может  Irrlicht работать с этими объектами по отдельности? один повернуть так,, другой по другому и т.д. Если да, как это делается?

#476
0:04, 18 сен. 2010

Если ты грузишь эти три объекта как один нод, то нет не может. Хотя если как-то удасться запихнуть вершины одного объекта в один мешбуфер, то думаю возможно будет управлять вершинами на низком уровне.

#477
0:49, 18 сен. 2010

Вообще не может или для *.obj? С collada существует возможность простыми средствами вынуть ноды?

#478
10:30, 20 сен. 2010

Народ нужна помощь короче такая ситуация. Есть объект(А) и к ниму приближаются другие объекты и надо определять какой объект столкнулся с объектом А! Все объекты типа сетка. Я вот не могу понять как заставить irrlicht определять столкновения.

#479
12:17, 20 сен. 2010

DFooz, не пользовался этим форматом не могу сказать. Если объекты в сцене динамически должны менять свое положение не проще собрать сцену например в IrrEdit и потом из кода управлять ими как отдельными нодами?
Andeksan, если нужно определять с каким имеено нодом столкнулся объект А, то используй методы класса irr::scene::ISceneCollisionManager - например getSceneNodeAndCollisionPointFromRay() или getSceneNodeFromRayBB()

Страницы: 131 32 33 3436 Следующая »
IrrlichtФорум

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