Рис. 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’е это просто кубик).
Ну и загруженную выше модель тоже добавим. И заодно уберем освещение. Пока мы работаем без света.
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]