Рубрика: IrrLicht

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

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

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

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

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

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

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

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



Таки пришлось писать этот материал… Распалятся много не буду, представленный ниже исходник показывает как можно программно манипулировать данными мешбуферов загруженных 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);
почему модель серого цвета, а не зелёного как я выставлял ???

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