Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Autor: Mariusz Klepaczko
Biblioteki C++

Wczytywanie modelu

[lekcja] Rozdział 3. Obsługiwane formaty plików, wczytywanie modelu md2, kamera typu FPS, zasięg widzenia, orbót, rotacja i przemieszczenie.

Wczytywanie Modelu

C/C++
#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 ) );
    //Zasięg pola widzenia kamery
    kam->setFarValue( 90000 );
    //Wczytywanie modelu
    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:

C/C++
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.

C/C++
kam->setFarValue( 90000 );

W tej linii ustawiliśmy zasięg kamery.
Jeżeli zmienimy w linii:

C/C++
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:

C/C++
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:

C/C++
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:

C/C++
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" ) );

  • setScale - Skalowanie mesha w (X,Y,Z)
  • setPosition - Pozycja mesha w (X,Y,Z)
  • setRotation - Obrót mesha w (X,Y,Z)
  • setMaerialFlag(video::EMF_LIGHTING, false); - tu wyłączamy dla materiału światło, ponieważ w scenie nie mamy światła dynamicznego i z tego powodu obiekt byłby czarny.

C/C++
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.
Poprzedni dokument Następny dokument
Pierwsze okno 3D Klawiszologia