[IRRLICHT] Wczytywanie i ustawienia Sceny
Ostatnio zmodyfikowano 2013-12-19 15:40
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? #include <irrlicht.h> #include "driverChoice.h"
using namespace irr;
int main( int argc, char ** argv ) { video::E_DRIVER_TYPE driverType = driverChoiceConsole(); if( driverType == video::EDT_COUNT ) return 1; IrrlichtDevice * device = createDevice( driverType, core::dimension2d < u32 >( 640, 480 ) ); if( device == 0 ) return 1; device->setWindowCaption( L"Load .irr file example" ); device->setResizable( true ); video::IVideoDriver * driver = device->getVideoDriver(); scene::ISceneManager * smgr = device->getSceneManager(); if( argc > 1 ) smgr->loadScene( argv[ 1 ] ); else smgr->loadScene( "Scene.irr" ); scene::ICameraSceneNode * camera = smgr->addCameraSceneNodeFPS( 0, 5, 0 ); scene::IMetaTriangleSelector * meta = smgr->createMetaTriangleSelector(); core::array < scene::ISceneNode *> nodes; smgr->getSceneNodesFromType( scene::ESNT_ANY, 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: 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: break; } if( selector ) { meta->addTriangleSelector( selector ); selector->drop(); } } scene::ISceneNodeAnimator * anim = smgr->createCollisionResponseAnimator( meta, camera, core::vector3df( 0, 5, 0 ), core::vector3df( 0, 5, 0 ) ); meta->drop(); camera->addAnimator( anim ); anim->drop(); camera->setPosition( core::vector3df( 4.0f, 1.f, - 1.5f ) ); scene::ISceneNode * cube = smgr->getSceneNodeFromType( scene::ESNT_CUBE ); if( cube ) camera->setTarget( cube->getAbsolutePosition() ); 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; }
|
|
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... |
|
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! |
|
« 1 » |