Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[IRRLICHT] Wczytywanie i ustawienia Sceny

Ostatnio zmodyfikowano 2013-12-19 15:40
Autor Wiadomość
wojownik266
Temat założony przez niniejszego użytkownika
[IRRLICHT] Wczytywanie i ustawienia Sceny
» 2013-12-19 12:54:07
Dosłownie przed chwilką zainstalowałem irrlichta blendera 2.46 oraz skrypt do tworzenia scen irr w blenderze. Wszystko działa wyśmienicie.... Moja prośba jest taka: Czy ktoś pomógłby mi w celach czysto edukacyjnych, tak zmodyfikować kod aby wczytana scena znajdowała się dokładnie w samym centrum okna i zajmowała całe okno? Wiem że ta prośba być może jest nie na miejscu ale siedzę już przy tym kilka godzin i nic sensownego nie mogę wymyślić... Przypuszczam że będzie to coś z ustawieniami kamery i funkcji setPosition. Zgadłem?

C/C++
#include <irrlicht.h>
#include "driverChoice.h"

using namespace irr;



int main( int argc, char ** argv )
{
    // ask user for driver
    video::E_DRIVER_TYPE driverType = driverChoiceConsole();
    if( driverType == video::EDT_COUNT )
         return 1;
   
    // create device and exit if creation failed
   
    IrrlichtDevice * device =
    createDevice( driverType, core::dimension2d < u32 >( 640, 480 ) );
   
    if( device == 0 )
         return 1; // could not create selected driver.
   
    device->setWindowCaption( L"Load .irr file example" );
    device->setResizable( true );
    video::IVideoDriver * driver = device->getVideoDriver();
    scene::ISceneManager * smgr = device->getSceneManager();
   
   
   
    // load the scene
    if( argc > 1 )
         smgr->loadScene( argv[ 1 ] );
    else
         smgr->loadScene( "Scene.irr" );
   
   
    scene::ICameraSceneNode * camera = smgr->addCameraSceneNodeFPS( 0, 5, 0 );
   
   
   
    // Create a meta triangle selector to hold several triangle selectors.
    scene::IMetaTriangleSelector * meta = smgr->createMetaTriangleSelector();
   
   
    core::array < scene::ISceneNode *> nodes;
    smgr->getSceneNodesFromType( scene::ESNT_ANY, nodes ); // Find all nodes
    smgr->setAmbientLight( video::SColorf( 255, 255, 255 ) );
    for( u32 i = 0; i < nodes.size(); ++i )
    {
        scene::ISceneNode * node = nodes[ i ];
        scene::ITriangleSelector * selector = 0;
       
        switch( node->getType() )
        {
        case scene::ESNT_CUBE:
        case scene::ESNT_ANIMATED_MESH:
           
            selector = smgr->createTriangleSelectorFromBoundingBox( node );
            break;
           
        case scene::ESNT_MESH:
        case scene::ESNT_SPHERE: // Derived from IMeshSceneNode
            selector = smgr->createTriangleSelector((( scene::IMeshSceneNode * ) node )->getMesh(), node );
            break;
           
        case scene::ESNT_TERRAIN:
            selector = smgr->createTerrainTriangleSelector(( scene::ITerrainSceneNode * ) node );
            break;
           
        case scene::ESNT_OCTREE:
            selector = smgr->createOctreeTriangleSelector((( scene::IMeshSceneNode * ) node )->getMesh(), node );
            break;
           
            default:
            // Don't create a selector for this node type
            break;
        }
       
        if( selector )
        {
            // Add it to the meta selector, which will take a reference to it
            meta->addTriangleSelector( selector );
            // And drop my reference to it, so that the meta selector owns it.
            selector->drop();
        }
    }
   
   
    scene::ISceneNodeAnimator * anim = smgr->createCollisionResponseAnimator(
    meta, camera, core::vector3df( 0, 5, 0 ),
    core::vector3df( 0, 5, 0 ) );
    meta->drop(); // I'm done with the meta selector now
   
    camera->addAnimator( anim );
    anim->drop(); // I'm done with the animator now
   
    // And set the camera position so that it doesn't start off stuck in the geometry
    camera->setPosition( core::vector3df( 4.0f, 1.f, - 1.5f ) );
   
    // Point the camera at the cube node, by finding the first node of type ESNT_CUBE
    scene::ISceneNode * cube = smgr->getSceneNodeFromType( scene::ESNT_CUBE );
    if( cube )
         camera->setTarget( cube->getAbsolutePosition() );
   
    /*
    That's it. Draw everything and finish as usual.
    */
   
    int lastFPS = - 1;
   
    while( device->run() )
    if( device->isWindowActive() )
    {
        driver->beginScene( true, true, video::SColor( 0, 200, 200, 200 ) );
        smgr->drawAll();
        driver->endScene();
       
        int fps = driver->getFPS();
       
        if( lastFPS != fps )
        {
            core::stringw str = L"Load Irrlicht File example - Irrlicht Engine [";
            str += driver->getName();
            str += "] FPS:";
            str += fps;
           
            device->setWindowCaption( str.c_str() );
            lastFPS = fps;
        }
       
    }
   
    device->drop();
   
    return 0;
}
P-99640
ridic14
» 2013-12-19 15:06:39
No a jaki masz problem z ustawieniem kamery tam gdzie Ci pasuje? Sam już podałeś metodę której potrzebujesz...
P-99641
wojownik266
Temat założony przez niniejszego użytkownika
» 2013-12-19 15:40:13
No niby tak... Rozwiazałem ten problem przy użyciu kawałka kodu z innego programu... Tak że to już teraz nie ważne. Dzięki!
P-99642
« 1 »
  Strona 1 z 1