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

[IRRLICHT 1.8.1] Brak ścian Sześcianu

Ostatnio zmodyfikowano 2013-12-30 23:35
Autor Wiadomość
wojownik266
Temat założony przez niniejszego użytkownika
[IRRLICHT 1.8.1] Brak ścian Sześcianu
» 2013-12-20 12:01:27
Zabrałem się właśnie za sklejanie pierwszej sceny w irrlichcie z jednym obiektem w roli głównej. Program się ładnie kompiluje i działa poza jednym wyjatkiem. Gdy przybliżę sześcian i wejdę do jego środka to znikają wszystkie (poza jedną) ściany tego sześcianu. Sześcian ten to Scena.irr zrobiona w blenderze 2.46 przy uzyciu skryptu do exportowania scen z blendera do formatu .irr. Wie ktoś co może być przyczyną opisanego wyżej problemu i jak to naprawić?

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


using namespace irr;
using namespace core;
using namespace scene;
using namespace video;



int main( int argc, char * argv[] )
{
   
    // create device and exit if creation failed
   
    IrrlichtDevice * device =
    createDevice( EDT_OPENGL, 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();
    camera->setPosition( core::vector3df( 0, 0, - 4 ) );
   
    // 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 ) );
   
   
   
    scene::ISceneNodeAnimator * anim = smgr->createCollisionResponseAnimator(
    meta, camera, core::vector3df( 5, 5, 5 ),
    core::vector3df( 0, 0, 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() );
   
    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-99687
maly
» 2013-12-20 12:35:26
cube->setMaterialFlag( video::EMF_BACK_FACE_CULLING, false );
P-99688
wojownik266
Temat założony przez niniejszego użytkownika
» 2013-12-20 13:57:06
O ile dobrze pamiętam to coś podobnego było w ogl 1.1... Tak że chyba wiem co masz na myśli. Jednak po dodaniu tej instrukcji do kodu powyżej, powoduje to że programu nie da się uruchomić ponieważ przy próbie uruchomienia otrzymuję komunikat że "Wystąpił problem z aplikacją... i zostanie zamknięta". Jak to obejść? Wie ktoś?
P-99690
maly
» 2013-12-20 14:22:59
Upewnij się czy
smgr->getSceneNodeFromType
 zwraca poprawny wskażnik na cube.
C/C++
scene::ISceneNode * cube = smgr->getSceneNodeFromType( scene::ESNT_CUBE );
if( cube )
{
    camera->setTarget( cube->getAbsolutePosition() );
    cube->setMaterialFlag( video::EMF_BACK_FACE_CULLING, false );
}
P-99691
wojownik266
Temat założony przez niniejszego użytkownika
» 2013-12-20 14:41:44
Teraz program się ładnie kompiluje i uruchamia ale problem ze sciankami bez zmian. Coś mi się zdaje że brakuje paru linijek kodu które wyrzuciłem... Tak że narazie bardzo Ci dziękuję za poświęcony mi czas i jak dosztukuję to co brakuje to znowu się odezwę. Miłego dnia!!
P-99693
DejaVu
» 2013-12-30 23:35:07
1. Wierzchołki wszystkich ścian trzeba renderować w odpowiedniej kolejności.
2. Jeżeli są jakieś artefakty przy rysowaniu podstawowych figur to zazwyczaj rozchodzi się o wyłączony bufor głębi (ale może irrlicht ma go włączonego domyślnie).

Upewnij się, że:
- model, którym dysponujesz działa poprawnie w innej prostej aplikacji
LUB
- weź działający model z innej PROSTEJ aplikacji i sprawdź czy działa u Ciebie
LUB
- http:/​/gamedev.stackexchange.com​/questions/30537​/how-to-determine-counter-clockwise-vertex-winding
LUB
- http://cpp0x.pl/forum/temat/​?id=9025
- http://cpp0x.pl/forum/temat/​?id=6675
, a najlepiej przeczytaj:
http://cpp0x.pl/kursy​/Kurs-OpenGL-C++/Wielokaty/108
P-100725
« 1 »
  Strona 1 z 1