IrrlichtСтатьи

Irrlicht.NET - первые шаги

Автор:

Настройка IDE

При написании статьи была использована среда разработки Microsoft Visual C# 2005 Express Edition. Однако, настройка IDE ранних версий абсолютно идентична.

Для начала стоит сделать новый проект: File->New Project: Console application.

Чтобы использовать Irrlicht в своем проекте необходимо добавить ссылку на Irrlicht.NET.dll. Делается это следующим образом:

Шаг 1.
Выберите в меню View->Solution Explorer. Или используйте сочетание клавиш Ctrl+W.

Шаг 2.
В окне Solution Explorer’а щелкните правой кнопкой мыши на названии проекта и в появившемся меню выберите Add reference (см. Рис 1).

Иллюстрация к статье Irrlicht.NET - первые шаги | Irrlicht.NET - первые шаги

Рис. 1

Шаг 3.
В открывшемся окне добавления ссылки выберите закладку Browse, и найдите файл Irrlicht.NET.dll, который, скорее всего, находится в /bin/Win32-VisualStudio внутри папки, в которую вы установили Irrlicht (см. Рис. 2).

Иллюстрация(2) к статье Irrlicht.NET - первые шаги | Irrlicht.NET - первые шаги

Рис. 2

Шаг 4.
Сохраните ваш проект. В корневой папке проекта должна быть папка bin, а в ней еще две – release и debug. В них и надо скопировать библиотеку Irrlicht.dll. Найти ее можно там же, где и Irrlicht.NET.dll.

На этом настройку IDE можно считать оконченной.

Кодинг

Для удобства можно использовать нэймспэйсы:

using Irrlicht;
using Irrlicht.Video;
using Irrlicht.Core;
using Irrlicht.Scene;

На заметку: внутри Irrlicht есть еще два неэймспейса: GUI и IO.

Теперь мы будем работать с функцией Main(), которая должна выглядеть примерно так:

static void Main( string[] args )
{
}

Дальше мы будем писать только внутри нее.

Сначала необходимо инициализировать Irrlicht и создать девайс(device - устройство), через который мы и будем управлять движком.

IrrlichtDevice device = new IrrlichtDevice(DriverType.DIRECT3D9);

В качестве драйвера отрисовки выбран Direct3D9. Вы можете использовать так же OpenGL и софтверный рендеринг.

Теперь зададим заголовок окна, и сделаем его размеры изменяемыми.

device.ResizeAble = true;
device.WindowCaption = "Irrlicht.NET C# example 01 - Hello World";

Сейчас можно приступить к загрузке текстур. Самый простой способ загрузить текстуру из файла – использовать функцию GetTexture класса VideoDriver. Обратите внимание, что мы обращаемся всегда в нашему девайсу.

ITexture texSydney = device.VideoDriver.GetTexture(@"sydney.bmp");
ITexture texWall = device.VideoDriver.GetTexture(@"wall.bmp");

Все текстуры и модели использующиеся в статье можно найти в папке media которая находится там, куда вы установили Irrlicht. Просто скопируйте нужные файлы в папку со своей программой, и все будет работать.

Следующим шагом будет загрузка моделей.

Чтобы загрузить модель из файла, мы будем использовать функцию GetMesh SceneManager’a. Вне зависимости от формата модели эта функция вернет Irrlicht.Scene.IAnimatedMesh. На данный момент (Irrlicht 0.14.0) поддерживаются следующие форматы: .obj(Alias Wavefront Maya), .ms3d(Milkshape3D), .bsp(Quake3 Level), .md2(Quake2 Model), .3ds(3D Studio), .x(Microsoft DirectX). В ближайшем будущем ожидается пополнение этого списка.

Так же не следует про проверку. Если функция вернет null, то модель по каким-то причинам не загрузилась (скорее всего, указан неправильный путь к файлу, или формат модели не поддерживается)

Irrlicht.Scene.IAnimatedMesh mesh = 
    device.SceneManager.GetMesh(@"sydney.md2");

if (mesh == null)
{
    System.Console.WriteLine (@"Could not load sydney.md2, exiting.");
}

Теперь о работе со сценой. Сцена – это то, что будет нарисовано Irrlicht’ом. Когда вы добавляете объект в сцену – значит вы добавляете его в список отрисовки. Просто загруженная модель рисоваться вовсе не будет.

Итак, будем добавлять объекты в сцену. Чтобы добавить что-то в сцену, нужно использовать функции SceneManager’а. Все функции, которые добавляют что-либо в сцену, начинаются на “Add” и возвращают в большинстве своем ISceneNode. Именно с помощью ISceneNode мы можем манипулировать объектами в сцене. Например – спрятать, удалить их. В нашем случае – установить материал и текстуру.

Для начала, пусть это будет некий тестовый объект (в Irrlicht’е это просто кубик).

ISceneNode node = device.SceneManager.AddTestSceneNode(15, null, -1, new Vector3D(30,-15,0));
node.SetMaterialTexture(0, texWall);

Ну и загруженную выше модель тоже добавим. И заодно уберем освещение. Пока мы работаем без света.

node = device.SceneManager.AddAnimatedMeshSceneNode(mesh, null, -1);
node.SetMaterialTexture(0, texSydney);
node.SetMaterialFlag(MaterialFlag.LIGHTING, false);

И, наконец, установим камеру. Пусть это будет камера, которая будет перемещаться стрелами и вращаться с помощью мыши. Хорошо, что в Irrlicht’е уже есть готовая камера с таким поведением ;).

ICameraSceneNode cam = device.SceneManager.AddCameraSceneNodeFPS(null, 100, 100, -1);
cam.Position = new Vector3D(20,0,-50);

Осталось только спрятать курсор, и подготовка сцены закончена.

device.CursorControl.Visible = false;

Теперь мы подошли к циклу отрисовки. Давайте сначала на него посмотрим:

while(device.Run())
{
    if (device.WindowActive)
    {
        device.VideoDriver.BeginScene(true, true, new Color(0,100,100,100));

        device.SceneManager.DrawAll();

        device.VideoDriver.EndScene();
    }
}

Все предельно просто. Функция Run класса девайс возвращает true, пока окно не захочет быть закрытым (нажали на крестик, например).

Перед началом рисования необходимо обратиться к VideoDriver’у и вызвать BeginScene. Первые два параметра включают (или выключают) очистку back-buffer’а и z-buffer’а цветом, указанным в третьем параметре.

Заканчивается рисование всегда вызовом EndScene того же VideoDriver’а.

А чтобы нарисовать все, что у нас имеется в сцене, вызовем DrawAll SceneManager’а.

Теперь можно все собрать и запустить.

Если у вас есть какие-либо вопросы по предоставленному материалу, пишите на .

На этом разрешите откланяться.

10 декабря 2005 (Обновление: 24 сен 2006)

Комментарии [5]