Wczytywanie Modelu
#include <irrlicht.h>
using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
int main()
{
IrrlichtDevice * device = createDevice( EDT_OPENGL, core::dimension2d < s32 >( 640, 480 ),
32, false, true, false, 0 );
video::IVideoDriver * video = device->getVideoDriver();
scene::ISceneManager * menage = device->getSceneManager();
scene::ICameraSceneNode * kam = menage->addCameraSceneNodeFPS();
device->getCursorControl()->setVisible( true );
kam->setPosition( core::vector3df( 0, 0, - 100 ) );
kam->setFarValue( 90000 );
IAnimatedMesh * pudlo = menage->getMesh( "media/mesh/pudlo.md2" );
IAnimatedMeshSceneNode * pud = menage->addAnimatedMeshSceneNode( pudlo );
pud->setScale( core::vector3df( - 300, - 300, - 300 ) );
pud->setPosition( core::vector3df( 0, 0, 900 ) );
pud->setMaterialFlag( video::EMF_LIGHTING, false );
pud->setMaterialTexture( 0, video->getTexture( "media/img/pudlo.png" ) );
while( device->run() )
{
video->beginScene( true, true, video::SColor( 255, 0, 10, 200 ) );
menage->drawAll();
video->endScene();
}
device->drop();
return 0;
}
Wyjaśnienia:
scene::ICameraSceneNode * kam = menage->addCameraSceneNodeFPS();
device->getCursorControl()->setVisible( true );
Zmiana kamery teraz zamieniliśmy kamerę zwykłą na kamerę typu FPS, co umożliwia nam poruszanie się za pomocą strzałek po naszym świecie 3D, a kontrolujemy rotacje ruchem myszy.
Irrlicht oferuje nam również kamerę typu "Maya", ale o tym w innej lekcji.
kam->setFarValue( 90000 );
W tej linii ustawiliśmy zasięg kamery.
Jeżeli zmienimy w linii:
device->getCursorControl()->setVisible( true );
Zmieniając wartość (true) na (false) pozwala nam ukryć kursor myszy. Aby wczytać model w tym wypadku zwykłe pudło, używamy komendy:
IAnimatedMesh * pudlo = menage->getMesh( "media/mesh/pudlo.md2" );
Formaty jakie mogą być użyte w Irrlichcie to: 3D Studio meshes (.3ds), B3D files (.b3d), Alias Wavefront Maya (.obj), Cartography shop 4 (.csm), COLLADA (.xml, .dae), DeleD (.dmf), FSRad oct (.oct), Irrlicht scenes (.irr), Irrlicht static meshes (.irrmesh), DirectX (.x), Milkshape (.ms3d), My3DTools 3 (.my3D), OGRE meshes (.mesh), Pulsar LMTools (.lmts), Quake 3 levels (.bsp), Quake 2 models (.md2), STL 3D files (.stl)
Ja użyłem tu formatu *md2, oczywiście mogłem stworzyć bryłę za pomocą komendy, gdyż irrlicht umożliwia nam operacje na prymitywach. Druga linia kodu:
IAnimatedMeshSceneNode * pud = menage->addAnimatedMeshSceneNode( pudlo );
Odpowiada za wyświetlenie siatki w oknie 3D, oraz nadanie bryle własnej nazwy na której możemy przeprowadzić różne operacje. W tym wypadku to nazwaliśmy nasze pudełko -> pud:
pud->setScale( core::vector3df( - 300, - 300, - 300 ) );
pud->setPosition( core::vector3df( 0, 0, 900 ) );
pud->setMaterialFlag( video::EMF_LIGHTING, false );
pud->setMaterialTexture( 0, video->getTexture( "media/img/pudlo.png" ) );
pud->setMaterialTexture( 0, video->getTexture( "media/img/pudlo.png" ) );
W tej linii kodu ładujemy texturę dla naszego pudła.
Materiały do pobrania
Pliki potrzebne do uruchomienia tej lekcji można pobrać
z naszego repozytorium.