Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 05.07.2007, 23:52   #1
Miks
AnyKey`щик
 
Регистрация: 05.07.2007
Сообщений: 3
Написано 0 полезных сообщений
(для 0 пользователей)
IrrLicht - для новичков

Урааа, наконец-то я нашол хоть один русский форум где обсуждают IrrLicht.
Я только начал использовать этот движок, и хотел бы попросить вашей помощи - уважаемые форумчане.
Что я знаю: прочитал и изучил все стандартные manual - 15штук.
Что я хочу знать: всё что вообще возможно знать по созданию игр на данном движке.

До недавнего времени у меня пока всё получалось - загружал стандартные pk3 уровни и т.д. Но вот попал в такую засаду - загрузка собственного уровня. Я сделал уровень в программе: Cartography Shop - сохранил его, но при загрузке - он просто булый или вообще ничего не показывает.
Как сохранить уровень так, чтобы движок нормально его загружал вместе с текстурами? Загружаю вот так:
smgr->loadScene("../../media/Miks.csm");

Если есть способ получше - посоветуйте пожалуйста, как - а главное в чем лучше сделать карту и как лучше её загрузить. Заранее благодарю всех.
(Offline)
 
Ответить с цитированием
Старый 06.07.2007, 00:04   #2
jimon
 
Сообщений: n/a
Re: IrrLicht - для новичков

Miks
не знаю где ты такое вычитал ... но loadScene ето не тоже самое что загрузить уровень

представь что ты имееш на уровне дофига обьектов, у каждого куча параметров и тд ... ето называется сценой и сцену в irrlichtе можно сохранять\грузить используя встроенные команды
формат файлов сцены свой, .irr ... основан на xml
лан ето в теории

короче так делать нельзя
дам тебе совет как делать по проще :
скачай irrEdit ... и создай там свою сцену
а потом ее грузи в irrlicht'е, дело в том что на "ощупь" по началу трудно в ирлихте понять что к чему, а так ты можеж попробовать все штучки визуально и убедится что работает не так

а вообще грузить надо было так
IAnimatedMesh * mesh = scmr->getMesh(model_name.c_str());
Model = scmr->addAnimatedMeshSceneNode(mesh);
 
Ответить с цитированием
Старый 06.07.2007, 12:17   #3
Miks
AnyKey`щик
 
Регистрация: 05.07.2007
Сообщений: 3
Написано 0 полезных сообщений
(для 0 пользователей)
Re: IrrLicht - для новичков

Я сделал уровень в IrrEdit - сохранил его с форматом .irr. Загрузил smgr->loadScene("../../media/Miks.irr"); - так описанно в 15-ом офф уроке. Он загружается вообще без текстур - просто всё белое с небольшим очертанием стен и т.п. Как сделать так, чтобы уровень загружался полность с текстурами - так как мне нужно(куда и как нужно сохранять текстуры, или что вообще нужно делать(стандартные уровни example.irr грузятся нормально))?
(Offline)
 
Ответить с цитированием
Старый 06.07.2007, 13:15   #4
jimon
 
Сообщений: n/a
Re: IrrLicht - для новичков

Miks
хм, а какие ты текстуры используеш ?
если ты не уверен точно
то открой свой .irr файл блокнотом и поищи там ссылки на файлы
к примеру
<string name="Mesh" value="../../media/room.3ds" />

15 пример собсно лежит в папке /bin/ и открывает ../../media/example.irr
но использует он пути записаные в етом файле как глобальный относительно exe !

тоесть если в irr файле будет написано
<string name="Mesh" value="room.3ds" />
а сам файл будет лежать в папке media
то room.3ds irrlicht будет искать в папке с exe а не в папке с файлом сцены

в irrEdit есть полезная фича для такого
открой файл irrEdit\scripts\autostart_setworking_directory.nut блокнотом
там собсно строчка
// irrSetWorkingDirectory("C:\\path\\to\\your\\game") ;
переделай ее на типа так
irrSetWorkingDirectory("C:\\blablabla\\mygame");
чтобы она указывала на папку с игрой

после етого irrEdit будет сам вписывать пути относительно exe

ps. ничего страшного что просто запутался с путями
 
Ответить с цитированием
Старый 06.07.2007, 13:22   #5
Miks
AnyKey`щик
 
Регистрация: 05.07.2007
Сообщений: 3
Написано 0 полезных сообщений
(для 0 пользователей)
Re: IrrLicht - для новичков

Огромное тебе спасибо за помощ, сейчас всё попробую
(Offline)
 
Ответить с цитированием
Старый 13.11.2007, 18:38   #6
DRAG
Знающий
 
Аватар для DRAG
 
Регистрация: 12.11.2006
Сообщений: 252
Написано 31 полезных сообщений
(для 73 пользователей)
Re: IrrLicht - для новичков

Дарофа всем
Я кстаи тоже ещё не видел нормальных сайтов(русских) по
irr, если и есть, то статьи - это перевод тутора который идёт с двигом, а если есть другие, то написаные за 5минут, и в которых толком нечего не оюъясняют
(Offline)
 
Ответить с цитированием
Старый 13.11.2007, 21:01   #7
magpro
Разработчик
 
Аватар для magpro
 
Регистрация: 23.08.2006
Сообщений: 586
Написано 6 полезных сообщений
(для 7 пользователей)
Re: IrrLicht - для новичков

Сообщение от Miks
Урааа, наконец-то я нашол хоть один русский форум где обсуждают IrrLicht.

Дай ссылочку
__________________
Никто не запомнит тебя за твои мысли...
(Offline)
 
Ответить с цитированием
Старый 13.11.2007, 21:17   #8
XenuS
Нуждающийся
 
Регистрация: 31.07.2007
Сообщений: 89
Написано одно полезное сообщение
Re: IrrLicht - для новичков

это же он про булку=)))
(Offline)
 
Ответить с цитированием
Старый 14.11.2007, 12:50   #9
magpro
Разработчик
 
Аватар для magpro
 
Регистрация: 23.08.2006
Сообщений: 586
Написано 6 полезных сообщений
(для 7 пользователей)
Re: IrrLicht - для новичков

=)
Ясно)
__________________
Никто не запомнит тебя за твои мысли...
(Offline)
 
Ответить с цитированием
Старый 14.11.2007, 14:58   #10
Данил
Модератор
 
Аватар для Данил
 
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений
(для 1,694 пользователей)
Re: IrrLicht - для новичков

Гы, я тож в начале не понял, что он про булку. Тож хотел сссылку попросить ^_^
(Offline)
 
Ответить с цитированием
Старый 10.02.2008, 16:21   #11
Dronchik
AnyKey`щик
 
Регистрация: 13.07.2007
Сообщений: 7
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: IrrLicht - для новичков

Приветствую всех. Пробую этот код для создания колизий .irr сцены
#include <irrlicht.h> 
#pragma comment(lib, "Irrlicht.lib") 
#include <iostream.h> 

// Used for getting Desktop Resolution 
#include <windows.h> 

using namespace irr; 
using namespace irr::core; 
using namespace irr::scene; 

IrrlichtDevice *intro = 0; 
video::IVideoDriver* driver = 0; 
scene::ISceneManager* smgr; 
scene::IMetaTriangleSelector* metaSelector; 
scene::ISceneNodeAnimatorCollisionResponse* anim; 
ICameraSceneNode* camera = 0; 

bool fin1; 

void recursiveFillMetaSelector(scene::ISceneNode* node, scene::IMetaTriangleSelector* meta ) 
{ 
  // 
  // the following if is basically the same as ISceneNode_assignTriangleSelector 
  // 
  printf ("Node name is: %s \n",node->getName()); 
  printf ("Node id is: %d \n",node->getID()); 
  printf ("Node type:"); 
  //  printf ("Node type: %s=",smgr->getSceneNodeTypeName()); 
  if (node->getType() ==   ESNT_UNKNOWN) printf("Unknown mesh type \n\n"); 
  if (node->getType() ==   ESNT_MESH) printf("Standard Mesh \n\n"); 
  if (node->getType() ==   ESNT_ANIMATED_MESH) printf("Animated Mesh! \n\n"); 
  if (node->getType() ==   ESNT_SKY_BOX) printf("SkyBox! \n\n"); 
  if (node->getType() ==   ESNT_CAMERA_FPS) printf("Fps Camera! \n\n"); 
  if (node->getType() ==   ESNT_CAMERA_MAYA ) printf("Maya Camera! \n\n"); 
  if (node->getType() ==   ESNT_CAMERA ) 
  { printf("STD Camera! \n"); 
   printf ("The current position of this camera is: %f,%f,%f\n\n",node->getPosition().X,node->getPosition().Y,node->getPosition().Z); 
   camera->setPosition(node->getPosition()); 
  } 
  if (node->getType() ==   ESNT_PARTICLE_SYSTEM ) printf("Particles! \n\n"); 
  if (node->getType() ==   ESNT_LIGHT  ) printf("Light! \n\n"); 
  if (node->getType() ==   ESNT_OCT_TREE) 
  { 
      // Occ Trees are for land 
      printf("Occtree! \n"); 
      io::IAttributes* attribs = intro->getFileSystem()->createEmptyAttributes(); 
      if (attribs) 
        {// get the mesh name out 
         node->serializeAttributes(attribs); 
         core::stringc name = attribs->getAttributeAsString("Mesh"); 
         attribs->drop(); 
         // get the animated mesh for the object 
         scene::IAnimatedMesh* mesh = smgr->getMesh(name.c_str()); 
         if (mesh) 
         { 
            scene::ITriangleSelector* selector = 
            smgr->createOctTreeTriangleSelector(mesh->getMesh(0), node, 128); 
            node->setTriangleSelector(selector); 
            metaSelector->addTriangleSelector(selector); 
            selector->drop(); 
         } 

     } 

  }  
  // now recurse on children... 
  core::list<scene::ISceneNode*>::ConstIterator begin = node->getChildren().begin(); 
  core::list<scene::ISceneNode*>::ConstIterator end   = node->getChildren().end(); 

  for (; begin != end; ++begin) 
    recursiveFillMetaSelector(*begin, meta); 
} 


int main() 
{ 
    // Get the full desktop size from Windows.H 
    // First the width 
    int nWidth = GetSystemMetrics(0); 
    // Second the Height 
    int nHeight = GetSystemMetrics(1); 
    intro = createDevice(video::EDT_DIRECT3D9, core::dimension2d<s32>(1024, 768), 32, false, true, true); 
    driver = intro->getVideoDriver(); 
    smgr = intro->getSceneManager(); 

    core::stringw str = "Level Demo"; 
   intro->setWindowCaption(str.c_str()); 

// Define the Keyboard to use for the camera moves 
    SKeyMap keyMap[9]; 
    keyMap[0].Action = EKA_MOVE_FORWARD; 
   keyMap[0].KeyCode = KEY_UP; 
   keyMap[1].Action = EKA_MOVE_FORWARD; 
   keyMap[1].KeyCode = KEY_KEY_W; 

   keyMap[2].Action = EKA_MOVE_BACKWARD; 
   keyMap[2].KeyCode = KEY_DOWN; 
   keyMap[3].Action = EKA_MOVE_BACKWARD; 
   keyMap[3].KeyCode = KEY_KEY_S; 

   keyMap[4].Action = EKA_STRAFE_LEFT; 
   keyMap[4].KeyCode = KEY_LEFT; 
   keyMap[5].Action = EKA_STRAFE_LEFT; 
   keyMap[5].KeyCode = KEY_KEY_A; 

   keyMap[6].Action = EKA_STRAFE_RIGHT; 
   keyMap[6].KeyCode = KEY_RIGHT; 
   keyMap[7].Action = EKA_STRAFE_RIGHT; 
   keyMap[7].KeyCode = KEY_KEY_D; 

   keyMap[8].Action = EKA_JUMP_UP; 
   keyMap[8].KeyCode = KEY_SPACE ; 

                // Setup the ZIP file "MyLevel.pk3" to be read directly 
       //intro->getFileSystem()->addZipFileArchive("levels/MyLevel.pk3"); 
                // Load the scene file from the archive 
   smgr->loadScene("irr.irr"); 

   camera = smgr->addCameraSceneNodeFPS(0, 120.0f, 120.0f, -1, keyMap, 9, true,0.25f); 
       camera->setRotation(core::vector3df(0,135,0)); 
       camera->setFarValue(11000.0); 
       camera->setAspectRatio(16/10); 
       camera->setFOV(PI/2.5); 
    metaSelector = smgr->createMetaTriangleSelector(); 
   recursiveFillMetaSelector( smgr->getRootSceneNode(), metaSelector ); 
   // DEfine the collision reponse for the FPS Camera 
   anim = smgr->createCollisionResponseAnimator(   metaSelector, camera, core::vector3df(10,26,10), 
      //metaSelector, camera, core::vector3df(10,26,10), 
      core::vector3df(0,-2.0f,0), 
      core::vector3df(0,24,0)); 
   camera->addAnimator(anim); 
   anim->drop(); 
    metaSelector->drop(); 
    while(intro->run() && fin1==false) 
   { 
      if (intro->isWindowActive()) 
      { 
         driver->beginScene(true, true, video::SColor(0,0,0,0)); 
         smgr->drawAll(); 
         driver->endScene(); 
      } 
   } 
   intro->closeDevice(); 
    return 0; 
}
Получаеться простое падение сквозь ирр сцену. А колизий нет. Как сделать чтоб появилась проверка колизий?
(Offline)
 
Ответить с цитированием
Старый 29.02.2008, 14:31   #12
Dronchik
AnyKey`щик
 
Регистрация: 13.07.2007
Сообщений: 7
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: IrrLicht - для новичков

Мне нужно было сделать колизии. Вот какое решение проблемы:
scene::IAnimatedMesh* l1v3levelmesh = smgr->getMesh("objects/land/level2.b3d");
  scene::ISceneNode* l1v3node = 0;

  driver->setTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS, false);

 if (l1v3levelmesh)
    l1v3node = smgr->addOctTreeSceneNode(l1v3levelmesh->getMesh(0));
 scene::ITriangleSelector* selector = 0;

  if (l1v3node)
  {    
    l1v3node->setPosition(core::vector3df(0,-52,0));
    selector = smgr->createOctTreeTriangleSelector(l1v3levelmesh->getMesh(0), l1v3node, 128);
    l1v3node->setTriangleSelector(selector);
    selector->drop();
  }
  l1v3node->getMaterial(0).SpecularColor.set(0,0,0,0);

 scene::ISceneNodeAnimator* anim = smgr->createCollisionResponseAnimator(
    selector, camera, core::vector3df(30,10,30),
    core::vector3df(0,-2,0), 
    core::vector3df(0,50,0));
  camera->addAnimator(anim);
  anim->drop();
Сдесь загружаеться сцена в формате b3d( другие не колизяться) и создаёться детектирование колизий.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
IrrLicht shybovycha C++ 109 22.02.2011 13:54
Irrlicht XenuS C++ 5 16.09.2007 22:30
Об Irrlicht. johnk C++ 1 03.04.2007 08:49
Irrlicht vs MD3 vs модельки E0LiN C++ 1 29.12.2006 11:23
Irrlicht WaReZ_MEN Delphi 22 03.10.2006 14:02


Часовой пояс GMT +4, время: 04:34.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com