|
05.07.2007, 23:52
|
#1
|
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
|
|
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
|
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
|
|
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
|
AnyKey`щик
Регистрация: 05.07.2007
Сообщений: 3
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: IrrLicht - для новичков
Огромное тебе спасибо за помощ, сейчас всё попробую
|
(Offline)
|
|
13.11.2007, 18:38
|
#6
|
Знающий
Регистрация: 12.11.2006
Сообщений: 252
Написано 31 полезных сообщений (для 73 пользователей)
|
Re: IrrLicht - для новичков
Дарофа всем
Я кстаи тоже ещё не видел нормальных сайтов(русских) по
irr, если и есть, то статьи - это перевод тутора который идёт с двигом, а если есть другие, то написаные за 5минут, и в которых толком нечего не оюъясняют
|
(Offline)
|
|
13.11.2007, 21:01
|
#7
|
Разработчик
Регистрация: 23.08.2006
Сообщений: 586
Написано 6 полезных сообщений (для 7 пользователей)
|
Re: IrrLicht - для новичков
Сообщение от Miks
Урааа, наконец-то я нашол хоть один русский форум где обсуждают IrrLicht.
|
Дай ссылочку
__________________
Никто не запомнит тебя за твои мысли...
|
(Offline)
|
|
13.11.2007, 21:17
|
#8
|
Нуждающийся
Регистрация: 31.07.2007
Сообщений: 89
Написано одно полезное сообщение
|
Re: IrrLicht - для новичков
это же он про булку=)))
|
(Offline)
|
|
14.11.2007, 12:50
|
#9
|
Разработчик
Регистрация: 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
|
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
|
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)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 23:56.
|