Привет!
Настроим среду разработки Microsoft Visual Studio. Инструкция для C++ 1) Откройте Visual Studio и в меню Tools выберите пункт Options. 2) Откройте пункт Projects and Solutions и в нём выберите VC++ Directories. 3) Найдите надпись Show Directories For и в списке снизу выберите Include Files. 4) Щелкните на кнопке New Line ,после
этого появится новая строчка в списке папок. 5) Щёлкните на этой строке и в конце строки появится кнопка,нажмите на неё и выберите папку с заголовочными файлами. 6) Нажмите ОК.Готово! Инструкция для C# 1) Откройте Visual Studio и в меню Project выберите пункт Add Reference. 2) Выберите вкладку Browse и найдите файл IrrLicht.dll(специальный файл для платформы .NET) 3) Нажмите ОК.Готово!
После того, как мы настроили среду разработки, можем
начать писать программу, итак, внесём свои первые строки.
//С++
#include <irrlicht.h>
Мы подключили самый главный заголовочный файл движка.
В Irrlicht все объекты, находятся в namespace irr, т.е.
если вы хотите обратится к какому-либо классу движка, то вам необходимо
написать irr:: перед именем класса. Например чтобы использовать
IrrlichtDevice необходимо написать irr::IrrlichtDevice. Чтобы избежать
утомительного вбивания irr, мы заставим компилятор делать это за нас :).
Необходимо написать следующий код:
//С++
using namespace irr;
Также в движке присутствует 5 namespaces второго уровня.
Более подробно вы можете прочитать про них в документации. Чтобы не
стать похожими на обязьян за печатными машинками и избавится от рутины,
мы напишем следующий код:
//С++
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;
//С#
using Irrlicht.Video; using Irrlicht.Core; using Irrlicht.Scene; using Irrlicht.IO; using Irrlicht.GUI;
Он даёт компилятору указание подставлять что надо, где
надо автоматически :) Чтобы использовать Irrlicht.dll мы должны
прилинковать файл irrlicht.lib. Мы можем мучатся и прописывать пути к
файлу ( как делал автор в самом начале :) ) А можем прямо в коде
написать следующее:
//С++
#pragma comment(lib, "где_он_у_вас_установлен/Irrlicht.lib")
Эта строка даёт указание компилятору прилинковать файл
"irrlicht.lib". Дальше. Необходимо ввести код главной функции. Я думаю
лучше всего использовать main.
//c#
namespace Urok1 { class Example { [STAThread] static void Main(string[] args) {
Самая важная функция в движке , это - "createDevice". С помощью этой функции инициализируется движок и создаётся самый главный объект движка, который является корневым и от него мы получаем все остальные объекты. У функции createDevice - 7 параметров: DeviceType: Типа устройства. Он принимает такие значения : 1) Null device ( EDT_NULL ) 2) Software device ( EDT_SOFTWARE ) 3) DirectX8( EDT_DIRECTX8) 4) DirectX9.0c ( EDT_DIRECTX9 ) 5) OpenGL ( EDT_OPENGL ) WindowSize: Размер окна для вывода изображения ( или разрешение, если включен полноэкранный режим ). Bits: Количество цветов. Сюда можно ставить либо 16, либо 32. Параметр игнорируется при оконном режиме. FullScreen: параметр отвечает за полноэкранный режим. StencilBuffer: параметр отвечает за использование стенсил буфера. Vsync: параметр игнорируется при оконном режиме. Определяет будет ли FPS синхронизироваться с частотой обновления экрана. EventReceiver: Объект для обработки событий, пока он нам не нужен, поставим 0.
//С++
IrrlichtDevice *device = createDevice(EDT_SOFTWARE, dimension2d<s32>(512, 384), 16, false, false, false, 0);
//С#
IrrlichtDevice device = new IrrlichtDevice(DriverType.OPENGL, new Dimension2D(512,384), 16, false, false, false, new System.IntPtr(0)); |
Теперь мы определим заголовок окна.
//c++
device->setWindowCaption(L"Первая программа с использованием IrrLicht");
//c#
device.WindowCaption = "Первая программа с использованием IrrLicht";
Теперь необходимо получить указатель на видео-драйвер (
IVideoDriver ), менеджер сцены ( ISceneManager ) и графический интерфейс
( IGUIEnvironment ), это делается для того, чтобы не писать постоянно
device->getVideoDriver(), device->getSceneManager() и
device->getGUIEnvironment().
//С++
IVideoDriver* driver = device->getVideoDriver();
ISceneManager* smgr = device->getSceneManager();
IGUIEnvironment* guienv = device->getGUIEnvironment();
//С#
IVideoDriver driver = device.VideoDriver;
ISceneManager smgr = device.SceneManager;
IGUIEnvironment guienv = device.GUIEnvironment;
Теперь мы добавим текст к окну используя IGUIEnvironment.
Текст будет расположен на позиции (10,10) (левый верхний угол ) и
(200,22) ( правый нижний угол ).
//c++
guienv->addStaticText(L"Демонстрация игрового движка - IrrLicht", rect<int>(10,10,200,22), true);
//c#
guienv.AddStaticText( "Демонстрация игрового движка - IrrLicht", new Rect( 10, 10, 200, 22 ), true, false, null, -1 );
Чтобы нарисовать что-нибудь интересное, мы загрузим Quake
2 модель ( .md2 ) и отобразим её. Мы получим от менеджера сцены
указатель на объект и (getMesh()) прикрепим к SceneNode. Каждый объект (IMesh )имеет
в движке свой Scene Node ( ISceneNode ) ( т.е. напрямую на IMesh нельзя
воздействовать) , с помощью которого мы можем этот объект вертеть,
перемещать, в общем производить какие-либо действия. IMesh служит только
для загрузки объекта в память. А для отображения объекта на экране,
необходимо создать этот самый Scene Node. В общем разберётесь! :Для того, чтобы
отобразить объект на экране (addAnimatedMeshSceneNode()). Движок может загружать модели следующих форматов :1) .md2 (Quake2) 2) .obj ( Maya ) 3) .bsp ( Quake3 Map ) 4) .ms3d ( Milkshape3D ) 5) .x ( DirectX ) 6) .3ds (3d Studio Max)(Вроде должен загружать)
Модель Sydney была сделана человеком по имени Brian Collins.
//С++
IAnimatedMesh* mesh = smgr->getMesh("../../media/sydney.md2");
IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( mesh );
//С#
IAnimatedMesh mesh = smgr.GetMesh(@"..\..\media\sydney.md2");
IAnimatedMeshSceneNode node = smgr.AddAnimatedMeshSceneNode(mesh, null, -1);
Чтобы моделька выглядела чуть лучше, мы немного изменим
её свойства: отключим у модельки освещение ( Примечание переводчика:
т.е. она будет выглядеть так, как будто её освещают со всех сторон -
никаких теней, она буде полностью освещена. Я понимаю, это странно
звучит, но у автора написано именно disable lighting, кому надо, тот
поймёт :) ) Затем мы заставим Sydney дрыгать ручками и ножками, для
этого будем циклично проигрывать кадры от 0 до 310.И в самом конце
натянем на модельку текстуру, чтобы девушка, была похожа на девушку.
//С++
if (node)
{
node->setMaterialFlag(EMF_LIGHTING, false);
node->setFrameLoop(0, 310);
node->setMaterialTexture( 0, driver->getTexture("../../media/sydney.bmp") );
}
//С#
if (node != null) { node.SetMaterialFlag( MaterialFlag.LIGHTING, false );
node.SetFrameLoop(0,310);
node.SetMaterialTexture( 0, driver.GetTexture( @"..\..\media\sydney.bmp" ) );
Чтобы узреть объект, нам необходимо добавить камеру в
позицию (0, 10, -40). Их этого места камера будет смотреть на точку
(0,5,0).
//С++
smgr->addCameraSceneNode(0, vector3df(0,30,-40), vector3df(0,5,0));
//С#
smgr.AddCameraSceneNode( null, new Vector3D(0,30,-40), new Vector3D(0,5,0), -1 ); |
Ура, мы загрузили всё что грузится и добавили, всё что
надо было, теперь давайте всё это нарисуем. Мы организуем цикл, который
будет работать до тех пор, пока мы не захлопнем устройство (
irrlichtDevice ) ( программно, через Ctrl-Alt-Del либо просто закроем
окошко, не важно )
//С++
while(device->run())
{
Всё должно отрисовываться между командами SceneManager
beginScene() и endScene() call. beginScene очищает экран заданным цветом
а также depth buffer, если это необходимо. Затем мы позволим
SceneManager ( Менеджер сцены ) и GUI Environment ( интерфейс
пользователя ) отрисовать всё, что необходимо. По команде endScene()
отрисовка закончится и всё, наконеч то :), вылезет на экран..
//С++
driver->beginScene(true, true, SColor(0,200,200,200));
smgr->drawAll(); guienv->drawAll();
driver->endScene(); }
//С#
driver.BeginScene(true, true, new Color(0,200,200,200));
smgr.DrawAll(); guienv.DrawAll();
driver.EndScene(); }
После того, как нам надоест созерцать дрыгающуюся
модельку, нам желательно уничтожить IrrlichtDevice. Делается это
функцией drop(). Такая функция есть почти у каждого объекта в Irrlicht.
Смотрите документацию для более подробной информации.
//С++
device->drop();
return 0; }
//С#
} // end main() } // end class } // end namespace
Всё! Если будут вопросы пишите на alexmail16@mail.ru
|