1 - создаем новый проект windows forms.
2 - в свойствах проекта-> свойства конфигурации-> общие-> Поддержка общеязыковой среды выполнения (CLR), ставим "Поддержка CLR-Среды (/clr)"
3 - добавляем к проекту файл "irrCommands.h" со следующим содержимым:
Код
/* с++ код--------------------------------*/
#include <irrlicht.h>
#pragma comment(lib, "Irrlicht.lib")
#pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup")
using namespace irr;
/* с++ код--------------------------------*/
(Лучше всего не добавлять остальные using namespace
чтобы не было конфликтов.)
Добавляем параметры девайса, сам девайс, видеодрайвер, менеджер сцены и ГУИ:
Код
/* с++ код--------------------------------*/
irr::SIrrlichtCreationParameters param;
irr::IrrlichtDevice* device = 0;
video::IVideoDriver* driver = 0;
irr::scene::ISceneManager* smgr = 0;
irr::gui::IGUIEnvironment* guienv = 0;
/* с++ код--------------------------------*/
Добавляем функцию инициализации:
Код
void initIrr()
{
//Заводим девайс, получаем видеодрайвер, менеджер сцены и ГУИ:
device = irr::createDeviceEx(param);
driver = device->getVideoDriver();
smgr = device->getSceneManager();
guienv = device->getGUIEnvironment();
//и добавляем камеру:
smgr->addCameraSceneNodeMaya();
}
Главный цикл движка иррлихт:
Код
void updateIrr()
{
while(device->run())
{
driver->beginScene(true, true, 0);
smgr->drawAll();
guienv->drawAll();
driver->endScene();
}
}
Функция добавления ресурсов, которую мы позже повесим на кнопку:
(добавьте ирлихтовскую папку "Data" в папку с приложением .)
Код
void addRes()
{
guienv->addStaticText(L"Hi dude! This is the Irrlicht winforms demo!", core::rect<s32>(10,10,260,22), true);
device->getFileSystem()->addFileArchive("./media/map-20kdm2.pk3");
scene::IAnimatedMesh* mesh = smgr->getMesh("20kdm2.bsp");
scene::ISceneNode* node = smgr->addOctreeSceneNode(mesh->getMesh(0), 0, -1, 1024);
node->setPosition(core::vector3df(-1300,-144,-1249));
}
Теперь займемся кодом winforms:
1 - подключаем "irrCommands.h"
Код
#pragma once
#include "irrCommands.h"
2 - добавляем таймер, на событие "Tick" вешаем код:
Код
this->timer1->Stop(); // чтобы цикл не дублировался каждый кадр
updateIrr(); //запускаем главный цикл ирлихта
(в winforms остальной код программы все равно будет выполняться паралельно с циклом)
3 - На событие формы "Load" вешаем следующий код:
Код
param.DriverType = video::EDT_DIRECT3D9;
param.WindowId = reinterpret_cast <void*>(this->panel1->Handle.ToInt32());
initIrr();
this->timer1->Start();
4 - Создаем кнопку и на событие "Click" вешаем:
5 - А на событие формы "FormClosed" вешаем
Все готово
Автор Шичкин Геннадий (_@NEMO@_ , MerGC Studio)
Скачать готовый пример
Оригинал статьи находится сдесь