Рубрика: Разработка игр

IrrLicht: важное событие

Автор: Эльмиго
05.10.2010

Здраво рассудив, что IrrLicht – это большая самостоятельная тема, я решил запустить молча новый проект, благо одновременно с мыслью освободился домен www.irrlicht.ru – явно это ЗНАК! :)

Почему я решил запустить его молча? Да не хотелось бы быть балаболом в грудь себя стучащим и прыгать вместе со всеми от радости, что мол такая идея классная. Решил сначала сделать сайт, заполнить не просто первоначальными данными, а важными данными. А самое главное, не хотелось сайт делать что бы был, я ответил себе на вопрос зачем он нужен и для чего.

У вас есть план, мистер Фикс? У меня есть план!!! (с)

Не буду разглашать ответ, пока не узнаю правильно ли ответил, а это будет не ранее чем через год думаю.

Поэтому добро пожаловать на новый сайт посвященный разработке игр.

Здесь считаю раздел закрытым.



«…Опыт, сын ошибок трудных…»

А.С. Пушкин

Все в мире относительно и относительно этой относительности я новичек в IrrLicht и тем более новичек в геймдеме. А если учесть, что хочу создать игру, даже не для себя, а кого-то внутри меня (пусть это будет мечтательное ЭГО), а потом уже для всех остальных, то считаю, что дела совсем плохи. Это не правильно, не рационально и совершенно бесполезно, но т.к. ЭТО перешло в разряд хобби, то сказочным образом полярность сменилась и я со спокойной совестью оставил все как есть, т.к. хобби само по себе удовольствие дорогое.

У меня сейчас есть редактор карт. Когда я пару месяцев назад его заканчивал, то у меня появилось ощущение всемогущества, что запросто сделаю не какую-то там игрульку, а редактор игр.  Я с рвением взялся за это дело и… и протормозив месяц, я практически потерял  желание садится за свое хобби и…  и от греха подальше отбросил на хер эту идею.

Читать полностью »



Таки пришлось писать этот материал… Распалятся много не буду, представленный ниже исходник показывает как можно программно манипулировать данными мешбуферов загруженных 3д моделей. в этой работе я загрузил модель склонировал ее вершины(мешбуфер) 32*32 раза в и поместил в один единственный мешбуфер хранилище, а потом удалил из хранилища вершины клонов которые находятся на диагонали сгенерированного квадрата.  Для осуществления манипуляций мной написан класс дубликатор для конкретной модели. Порядок работы таков

Читать полностью »



а вообще в числе физических объектов ирлихта!

спешу «обрадовать», смертельные удары по быстродействию наносит не только большое число нод, но и в равной степени большое число мешбуферов в одной ноде… вот так, т.е. приемлимое быстродействие «храниться» в пределах сотни нод(мешбуферов) иначе имейте под рукой инструмент который сможет пихать в ОДИН мешбуфер и удалять из него вершины и индексы произвольно.

вот так, одну проблему решил – вылазит еще одно и похлеще превой, так ведь и забить на это дело не долго… :( уродсво какое-то



Все учатся на своих ошибках, но ошибки найдены и признаны и вот результат проб и ошибок

1.

Тщательный контроль нужен за своими собственными объектами созданными с помощью new которые к IrrLicht отношения не имеют, простенький пример:

struct tile { int texIdx; };

std::vector< std::vector<tile *> >tiles;
tiles.resize(1);
tiles[1] = new tile;

ирлихту глубоко пофигу до вашего tiles и tile в нем если вы сами не сделаете delete tiles[ 1], прежде чем сделать вновь tiles[1] = new tile, то произойдет утечка памяти на величину равную sizeof(tile)

P.s. ну это наверное и ежу понятно

Читать полностью »



14.01.2010

ларчик просто открывался, irrlicht по умолчанию считает что uv текстура будет накладываться как (0,0 – 0,1 – 1,1 – 1,0), видеокарта напрягается, создавая припуски которые должны прятать швы, а т.к текстура у меня комплексная – текстура текстур (простите за каламбур) и координаты я задаю идеальные, то швов нет  и потуги видеокарты на тему удаления швов  видны во все красе.

map_node->setMaterialFlag(irr::video::EMF_BILINEAR_FILTER, false);

вот так, товарищи!

shot_55323

для сравнения посмотрите что было – текстуры со швами



чутка добрался до своего творения, все-таки WoW жуткая вещь :(

и так дополню статью, что после строки

irr::scene::IMeshSceneNode
*meshNode = smgr->addMeshSceneNode(dmes);

надо сделать

dmes->drop();
buffer->drop();

в общем я понял, чтобы избежать утечки памяти надо дропать любой объект, который вы создали с помощь new и передали на контроль ирлихту, т.к.  irrlicht запоминает не ссылку на объект, а делает себе копию объекта и с копией же работает.

Еще одно  открытие – это то, что включенный VBO влияет и на текстурные координаты, т.е. если mesh объявлен статическим,  то после изменения текстурных координат надо выполнить mesh->getMeshBuffer(buffer_number)->setDirty();.

мне предлагали попробовать загрузку текстурки без генерации mipmap уровней, сделал так
driver->setTextureCreationFlag(irr::video::ETCF_CREATE_MIP_MAPS, false);
t_world_1 = driver->getTexture(»res/floor_world_1.jpg»);
driver->setTextureCreationFlag(irr::video::ETCF_CREATE_MIP_MAPS, true);
не дало ни какого приросту

Читать полностью »



Сейчас делаю редактор карт на движке IrrLicht, а потом может и игру сделаю, почему решил сначала редактор, а потому что собственно редактор контента игры содержит практически 50% функционала самой игры :)

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

map

Изначально мощение ландшафта выглядело так:

for (int z=0; z<128; z++)
for (int x=0; x<128; x++)
{
irr::scene::IMeshSceneNode* n = smgr->addMeshSceneNode( mes, 0, -1, irr::core::vector3df(-x, 0, z) );
n->setMaterialFlag( irr::video::EMF_LIGHTING, false ); //освещение пока не использую
n->setMaterialTexture( 0, tex );
n->getMesh()->setHardwareMappingHint(irr::scene::EHM_STATIC); //типа VBO
}

Читать полностью »



16.10.2009

тут чувак возьми да и спроси

Зделал обычную сферу в 3ds Max, кинул на ниё свой материал. Экспортонул получившуюся модель в *.3ds формат…
добавляю её так:
scene::IAnimatedMesh* fireballMesh = pSmgr->getMesh(»media/models/fireball/fireball.3ds«);
fireballMesh->setMaterialFlag(video::E_MATERIAL_FLAG::EMF_LIGHTING, true);
почему модель серого цвета, а не зелёного как я выставлял ???

чес говоря, сразу видно, что человек даже доки не удосужился почитать, а ответ в его же коде – в первой строке он грузит модель, во второй выставляет флаг, что материал должен реагировать на источники света, а где же третья строка типа вот такой: Читать полностью »