Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Irrlicht] Problèmes de débutant

Echelle, surfaces, transparence

    7 septembre 2018 à 22:36:49

    Bonsoir, je débute avec Irrlicht et je constate déjà trois problèmes dans le chargement d'un fichier .obj exporté sous Blender :
    - Je constate que l'échelle ne correspond pas du tout à celle de Blender, ce qui me pose problème car je dois charger plusieurs meshs
    - Certaines surfaces deviennent invisibles lorsque la caméra passe derrière
    - J'utilise des textures à fond transparent (TGA 32 bits) mais dans le rendu, les zones transparentes apparaissent blanches
    Voici mon code :
    Le main :
    int main(void)
    {
        irr::IrrlichtDevice *device=irr::createDevice(
        irr::video::EDT_OPENGL,
        irr::core::dimension2d<irr::u32>(800,600),
        32,
        false,
        true,
        false,
        0);     //Création fenêtre utilisant OpenGL, de taille 800x600, avec une profondeur de 32 bits
    
        irr::video::IVideoDriver *driver=device->getVideoDriver();    //Initialisation communication avec OpenGL
    
        irr::scene::ISceneManager *sceneManager=device->getSceneManager();      //Graphe de scène
    
        InitCam(sceneManager);
        InitMap(sceneManager);
    
        while(device->run())        //Rendu
        {
            driver->beginScene(true,true,irr::video::SColor(0,0,128,255));
    
            sceneManager->drawAll();
    
            driver->endScene();
        }
    
        device->drop();     //Libération mémoire
    
        return 0;
    }
    Fonction InitCam() :
    void InitCam(irr::scene::ISceneManager *sceneManager)
    {
        irr::scene::ICameraSceneNode *camera;
        irr::SKeyMap keyMap[TAILLE_KEYMAP];
        const float vitesseCam=0.001;
        const float vitesseRotCam=100;
    
        keyMap[0].Action=irr::EKA_MOVE_FORWARD;   //Avancer
        keyMap[0].KeyCode=irr::KEY_UP;
        keyMap[1].Action=irr::EKA_MOVE_BACKWARD;  //Reculer
        keyMap[1].KeyCode=irr::KEY_DOWN;
        keyMap[2].Action=irr::EKA_STRAFE_LEFT;    //A gauche
        keyMap[2].KeyCode=irr::KEY_LEFT;
        keyMap[3].Action=irr::EKA_STRAFE_RIGHT;   //A droite
        keyMap[3].KeyCode=irr::KEY_RIGHT;
    
        camera=sceneManager->addCameraSceneNodeFPS(0,vitesseRotCam,vitesseCam,-1,keyMap,TAILLE_KEYMAP,false);
    
        camera->setPosition(irr::core::vector3df(-50,0.1,0.1));       //Position caméra
    }
    Fonction InitMap() :
    void InitMap(irr::scene::ISceneManager *sceneManager)
    {
        irr::scene::IAnimatedMesh *map=sceneManager->getMesh("Decor.obj");
        irr::scene::IMeshSceneNode *NodeMap=sceneManager->addMeshSceneNode(map);
    
        NodeMap->setMaterialFlag(irr::video::EMF_LIGHTING,false);        //Eclairage désactivé
    }
    L'utilisation de setMaterialType() avec "EMT_TRANSPARENT_ADD_COLOR" ne change rien aux problèmes de transparence.
    Il y a d'ailleurs d'autres questions que je me pose avec Irrlicht : J'ai l'habitude d'utiliser OpenGL et de fixer un fovy, un frustum ... Mais ici, comment fixer ces paramètres ?
    Edit : J'ai finalement trouvé comment fixer le fovy et le reste. Pour la transparence, j'ai progressé en ajoutant :
    NodeMap->setMaterialType(irr::video::EMT_TRANSPARENT_ALPHA_CHANNEL);
    Mais ça donne un résultat étrange :
    Les poteaux sont masqués par le sol comme si le Z-buffer était désactivé.

    -
    Edité par KevinGL 8 septembre 2018 à 1:56:11

    • Partager sur Facebook
    • Partager sur Twitter

    [Irrlicht] Problèmes de débutant

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown