Среда, 20 Ноября 2024, 04:20

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
[IrrLicht] - Подключаем IrrLicht к Windows Forms (C++)
_@NEMO@_Дата: Вторник, 08 Апреля 2014, 13:48 | Сообщение # 1
почетный гость
Сейчас нет на сайте
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" вешаем:

Код
addRes();


5 - А на событие формы "FormClosed" вешаем

Код
device->drop();


Все готово smile
Автор Шичкин Геннадий (_@NEMO@_ , MerGC Studio)


Скачать готовый пример

Оригинал статьи находится сдесь


Музыкант аранжировщик.

https://vk.com/ge_ne_tick
Мой паблик ВКонтакте.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг