Городок Мещерино-1

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Городок Мещерино-1 » Компьютеры » Пишем игры на irrlicht


Пишем игры на irrlicht

Сообщений 1 страница 11 из 11

1

Вступление

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

Далее здесь я буду выкладывать перевод туториелов по этому движку где будет объясняться как создать свою игру. Ориентированы туториелы будут на линукс, но в принципе все тоже самое можно будет выполнять и под виндой.

Для начала вот несколько ссылок с информацией которая понадобиться для написания игры

http://vbbook.ru/c/ - С++

http://www.mediawiki.org/wiki/Lua/Tutorial  - Lua (это не только ComputerCraft)

http://irrlicht.sourceforge.net/tutorials/ - Собственно сами уроки по движку

Ну а ссылку а Англо-Русский переводчик, я думаю найдете сами :)

P.S. Еще пара ссылок по движку на Русском (ВНИМАНИЕ В ПЕРЕВОДАХ КРИВОЙ КОД!)

http://irrlicht.ru/?page_id=23

http://www.gamedev.ru/community/irrlicht/

2

За движки обычно платят для дальнейшего пользования. За движки сайтов цены приемлемые. А для игр дороговато. Неужели настало время, когда движок для игр стал бесплатным? )))

3

Бесплатных игровых движков великое множество наиболее популярные из них это OGRE (ОГР) и Irrlicht (ИРЛИХТ).

Я не буду тут приводить примеры платных игр на бесплатных движках, но они точно есть.

4

Подготовка к работе в Linux

У меня установлен дистрибутив RussianFedora, но все должно работать так же и на любом другом дистрибутиве с отличием лишь в командах по установке пакетов.

И так, для начала ставим сам движок, да в отличии от бедных виндузятников нам не нужно его отдельно компелировать.

Код:
sudo yum install irrlicht

соглашаемся на установку всех необходимых зависимостей.

Далее, нам необходима какая то графическая среда для разработки программ, так называемая IDE (integrated development environment), интегрированная среда разработки.
Наиболее популярной такой средой является code::blocks, установим и его

Код:
sudo yum install codeblocks

он потянет за сабой все необходимые  пакеты, соглашаемся.

Установим так же

Код:
sudo yum install gcc gcc-c++ irrlicht-devel xorg-x11-server-devel libxxf86vm-devel mesa-libGLU-devel mesa-libGL-devel libXext-devel

Первый запуск программы встречает нас страшным окном

http://sa.uploads.ru/t/Zv7D4.png

Выбераем вариант с GNU/GCC Compiller (если этого варианта нет, то у вас почемуто не установился пакет gcc, доуставновите его)

Создадим новый проект File->New->Project->Empthy Project (Можно было выбрать и готовый шаблон irrlicht, но он требует что бы все необходимые нам библиотеки лежали в одной папке, а в нашем случае это не так)

в поле Title пишем заголовок проекта (к примеру tutorial 1), в поле Folder To Create определяем путь к папке где будем хранить наш проект , поле Project Filename генерится автоматически и обычно равняется Title (просто title – это то че рисуется в заголовке окна, а filename – это физическое имя файла на диске), поле Resulting Filename генерится тоже автоматически – складывает три предыдущих поля. (жмем Next)

http://sa.uploads.ru/t/AIr6d.png

затираем поля Output dir чтобы исполняемый файл компилировался в конревой каталог проекта, жмем Next и заканчиваем создание проекта

http://sa.uploads.ru/t/yDOoS.png

Подключить движок можно непосредственно к проекту, а можно и сразу к нашей IDE (открываем меню Project -> Build Options) или, чтобы не подключать движок каждое новое занятие
открываем меню Settings-> Compiller... и выбираем в левой колонке Global Compiller Settings, справа по очереди выбираем вкладки

Linker Settings нажимая Add и вбиваем, соблюдая регистр букв, последовательно Irrlicht GL Xxf86vm Xext X11

http://sa.uploads.ru/t/5d9Px.png

Search Directories/Linker нажатием Add вбиваем путь /lib64 (/lib для 32 битной ос)

http://sa.uploads.ru/t/aRpe5.png

Search Directories/Compiler нажатием Add вбиваем два пути /usr/include и /lib64 жмем ОК

http://sa.uploads.ru/t/JlhCt.png

все, создаем файл main.cpp

меню File -> New -> File -> c/c++ source -> путь до файла  main.cpp

ВАЖНОЕ ЗАМЕЧАНИЕ!

НЕ ЗАБУДТЕ ОТМЕТИТЬ ГАЛОЧКИ НА RELEASE И DEBUG ИНАЧЕ НЕ БУДЕТ РАБОТАТЬ КОМПИЛЯЦИЯ

http://sa.uploads.ru/t/Nkg3Q.png

Отредактировано LeGUN (11-11-2014 14:54:51)

5

Туториал №1: Hello World

Перед началом урока скачайте архив http://downloads.sourceforge.net/irrlic … 1.8.1.zip, распакуйте куда нибудь и скопируйте в папку нашего проекта папку media.

После того как вы настроите свое IDE, ваш компилятор будет знать где лежат заголовки IrrLicht и вам надо всего лишь подключить их к своему проекту, вот так:

Код:
#include "irrlicht.h";

В движке все его сущности определены в пространстве имен(namespace) ‘irr’. Таким образом если вам надо обратится к классу движка, то вам надо написать irr:: перед его именем. Для примера, чтобы использовать IrrlichtDevice пишите: irr::IrrlichtDevice. Вставляя irr:: перед имене класса, мы сообщеам компилятору, что используем пространство имен движка. Хотя, можно ибавится от необходимости писать эту приставку с помощью следующей строки:

Код:
using namespace irr;

Ниже перечислены 5 подпространств движка. Подробное описание каждого из них доступно по этой ссылке:  http://irrlicht.sourceforge.net/docu/namespaces.html . Как и в случае с irr:: вы можете избавится от необходимости их постоянно указывать вот так:

Код:
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;

Чтобы использовать Irrlicht.DLL, надо подключить Irrlicht.lib. Это можно сделать двумя способами, указать в настройках линкера или использовать диррективу pragma comment.

Код:
#ifdef _IRR_WINDOWS_
#pragma comment(lib, "Irrlicht.lib")
#pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup")
#endif

irrlicht кроссплатформенный движок, поэтому мы будет использовать main вместо WinMain.

Код:
int main()
{

Cамая главная функция движка – это createDevice() , ею создается корневой объект движка IrrlichtDevice и методами которого делается много чего полезного. Функция createDevice() имеет 7 аргументов
deviceType: Тип устройства. Принимает значения: EDT_SOFTWARE, EDT_BURNINGSVIDEO, EDT_NULL, EDT_DIRECT3D8, EDT_DIRECT3D9 или EDT_OPENGL.
windowSize: размер окна в оконном режиме или разрешение экрана в полноэкранном режиме.
bits: Количество бит для цвета на один пиксель. Может быть 16 или 32. Параметр часто игнорируется в оконном режиме.
fullscreen: определяет в оконном или полноэкранном режиме будет запущено приложение
stencilbuffer: включает трафаретный буфер (для рисования теней).
vsync: включает вертикальную синхронизацию, полезна для полноэкранного режима.
eventReceiver: объект – обработчик событий. Если в нем нет необходимости, ставить равным нулю.

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

Код:
 IrrlichtDevice *device =
        createDevice( video::EDT_SOFTWARE, dimension2d<u32>(640, 480), 16,
            false, false, false, 0);

    if (!device)
        return 1;

Определяем заголовок окна чем нибудь симпатичным и подходящим по смыслу. Заметка: перед кавычками стоит ‘L’, т.к. Irrlicht использует для текстовых символов 2 байта.

Код:
 device->setWindowCaption(L"Hello World! - Irrlicht Engine Demo");

Создадим указатели на видео драйвер, менеджер сцены и менеджер пользовательского интерфейса:

Код:
    IVideoDriver* driver = device->getVideoDriver();
    ISceneManager* smgr = device->getSceneManager();
    IGUIEnvironment* guienv = device->getGUIEnvironment();

С помощью GUI среды создадим текстовую метку в координатах (10,10) левый верхний угол и (260,22) правый нижний. Чтобы выводимый текст был на русском языке, файлы проекта должны быть в кодировке UTF-8, если у вас так, то можете смело вместо “Hello World!….” писать “Привет Мир!…”.

Код:
guienv->addStaticText(L"Hello World! This is the Irrlicht Software renderer!",
        rect<s32>(10,10,260,22), true);

Чтобы было не так скучно, загрузим модельку из игры Quake2 и отобразим ее. Мы просто “попросим” ее у менеджера сцены с помощью getMesh() и добавим к сцене с помощью addAnimatedMeshSceneNode(). Чтобы избежать ошибок, проверим загрузилась модель без ошибок.

Вместо того, чтобы писать Имя файла  sydney.md2, можно будет также загрузить  объектный файл  Maya(.obj), карту Quake3 (.bsp) или любой другой поддерживаемый Формат

Код:
IAnimatedMesh* mesh = smgr->getMesh("media/sydney.md2");
    if (!mesh)
    {
        device->drop();
        return 1;
    }
    IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( mesh );

Чтобы моделька выглядела привлекательно, мы натянем на нее материал. Отключим освещение для этой модели иначе она будет рисоваться абсолютно черной, потому как на сцене нет источников света. Затем определим диапазон фреймов, будет использовать предопределенный набор STAND из списка стандартных анимаций для моделей Quake2.

Код:
if (node)
    {
        node->setMaterialFlag(EMF_LIGHTING, false);
        node->setMD2Animation(scene::EMAT_STAND);
        node->setMaterialTexture( 0, driver->getTexture("media/sydney.bmp") );
    }

Чтобы увидеть модель на экране, надо добавить на сцену камеру и направить на нее. Камеру значит разместим в позиции (0, 30, -40), а “смотреть” она будет в точку (0,5,0), где приблизительно располагается загруженная модель.

Код:
 smgr->addCameraSceneNode(0, vector3df(0,30,-40), vector3df(0,5,0));

И так, сцену мы настроили, теперь запускаем главный цикл программы, в котором происходит вывод на экран. (для того чтобы закрыть окно программы используйте ALT+F4

Код:
 while(device->run())
    {

Все что может нарисоваться на экране, рисуется между вызовами beginScene() и endScene(). Функция beginScene() закрашивает выбранным цветом основной буфер экрана и дополнительный (если нужно). Затем даются команды менеджеру сцены и менеджеру пользовательского интерфейса нарисовать свой контент. Фукция endScene() выводит все на экран.

Код:
driver->beginScene(true, true, SColor(255,100,101,140));

        smgr->drawAll();
        guienv->drawAll();

        driver->endScene();
    }

По завершению главного цикла программы мы должны удалить главный объект движка, созданный с помощью createDevice(). В движке Irrlicht все объекты созданные функциями, начинающимися с приставки ‘create’, можно удалить методом drop (см. irr::IReferenceCounted::drop() ).

Код:
 device->drop();

    return 0;
}

вот и все!

Выставляем на панели из списка Release и нажимаем Build ("зеленый стрелочка") :)
http://i.imgur.com/dKelOco.png

Отредактировано LeGUN (11-11-2014 16:16:33)

6

для самопроверки вот весь код http://pastebin.com/079qd9KY

7

Вот это все для кого Вы пишите? В городке кому-то это надо?  :tired:

8

Вы случайно плагиатом не занимаетесь?
Иначе указывайте автора и источник.  :writing:

9

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

10

Оки  :crazyfun:

11

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


Вы здесь » Городок Мещерино-1 » Компьютеры » Пишем игры на irrlicht