#0 

18-02-2013 21:05:38

ment0s-
Petit nouveau
Date d'inscription: 06-04-2011
Messages: 8

Bonjour à tous,

Me remettant récemment à coder sous Irrlicht, je viens vers vous car je rencontre un problème sous Irrlicht avec un format .OBJ que j'ai créer et exporter à partir de Blender :


Au cas ou cela viendrait du code source :

Code:

#include <iostream>
#include <irrlicht.h>
 
using namespace std;
/* Namespaces pour Irrlicht : */
using namespace irr;
using namespace video;
using namespace core;
using namespace scene;
 
int main(int argc, char** argv)
{
    // On initialise le moteur
    cout << "Choix de la resolution de l'ecran : " << endl;
    cout << "a. 640*480 - 32 bits " << endl;
    cout << "b. 800*600 - 32 bits " << endl;
    IrrlichtDevice* device;
    char choix = 0;
    cin >> choix;
    if (choix = 'a')
        device = createDevice(EDT_OPENGL,dimension2d<u32>(640, 480), 32, false, false);
    else if (choix == 'b')
        device = createDevice(EDT_OPENGL,dimension2d<u32>(800, 600), 32, false, false);
    else
        exit(0);
    // On récupère le gestionnaire de scene
    ISceneManager* scenemgr = device->getSceneManager();
    scenemgr->setAmbientLight(SColorf(1.f,1.f,1.f,1.f));
    // On récupère le pilote video
    IVideoDriver* driver = device->getVideoDriver();
    // On met un titre pour notre fenetre
    device->setWindowCaption(L"Premier projet Irrlicht");
 
    SKeyMap keyMap[5];                    // re-assigne les commandes
    keyMap[0].Action = EKA_MOVE_FORWARD;  // avancer
    keyMap[0].KeyCode = KEY_KEY_Z;        // z
    keyMap[1].Action = EKA_MOVE_BACKWARD; // reculer
    keyMap[1].KeyCode = KEY_KEY_S;        // s
    keyMap[2].Action = EKA_STRAFE_LEFT;   // a gauche
    keyMap[2].KeyCode = KEY_KEY_Q;        // q
    keyMap[3].Action = EKA_STRAFE_RIGHT;  // a droite
    keyMap[3].KeyCode = KEY_KEY_D;        // d
    keyMap[4].Action = EKA_JUMP_UP;       // saut
    keyMap[4].KeyCode = KEY_SPACE;        // barre espace
 
    scenemgr->addCameraSceneNodeFPS(       // ajout de la camera FPS
        0,                                     // pas de noeud parent
        100.0f,                                // vitesse de rotation
        0.01f,                                  // vitesse de deplacement
        -1,                                    // pas de numero d'ID
        keyMap,                                // on change la keymap
        5);                                    // avec une taille de 5
    // On ajoute une map à la scene :
    IAnimatedMesh *room = scenemgr->getMesh("media/Map01b.obj");
    ImeshSceneNode *nRoom = scenemgr->addMeshSceneNode(room->getMesh(0));
    nRoom->setMaterialFlag(EMF_LIGHTING, false);
    scenemgr->getMeshManipulator()->makePlanarTextureMapping(room->getMesh(0), 0.2f);
    nRoom->setScale(vector3df(2,2,2));
    //nRoom->setMaterialTexture(0, driver->getTexture("media/Textures/carrelageSol.jpg"));
    // On lance la boucle de rendu
    while(device->run())
    {
        driver->beginScene(true, true, SColor(255,128,128,255));
        scenemgr->drawAll();
        driver->endScene();
    }
 
    device->drop();
 
    return 0;
}

J'ai essayé avec un simple cube que j'applique une texture, et le résultat est le même ! sad Pourtant, sous Blender le rendu est correcte.. !

Quelqu'un peut-il m'expliquer si le problème viens du code ou de mon fichier .obj?
Merci d'avance ! smile

Hors ligne


#1 

19-02-2013 09:55:54

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

Ton problème ne vient pas de Blender ni d'Irrlicht. Tu utilises "makePlanarTextureMapping()" donc irrlicht créé les coordonnées de textures des vertex selon les infos de ceux-ci.
Le problème vient certainement de la modélisation. Peux-tu, sous Blender, recalculer et normaliser les normales? (recherches sur internet comment faire car moi j'utilise 3DSMax)
Le mieux serait d'ailleurs de faire ton propre UVWMapping. Au moins ton résultat ne serait pas "aléatoire".


core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."

Hors ligne


#2 

19-02-2013 19:20:43

ment0s-
Petit nouveau
Date d'inscription: 06-04-2011
Messages: 8

Bonjour,
Merci de cette réponse rapide.
J'ai sélectionner ma face en me mettant en mode "edition" et sur le menu de gauche -> Normal : Recalculate normal, puis Flip Direction. Le résultat est différent :  lors de l'affochage de mon cube en format OBJ sous Blender, la face n'apparait plus avec cette méthode.
Par-contre, si je ne met que recalculate normal, rien ne change.
L'UV Mapping sur un cube OK, mais sur un objet plus compliqué ce n'est pas pareil. Surtout que pour le moment je veux simplement 1 objet = 1 texture. (mon but étant de créer une map "basique" au format OBJ avec quelques objets simple (maison, table, chaise, etc.)

Par-contre, j'ai recalculer les normales, mais comment on "normalise" les normales?

Merci d'avance.

Hors ligne


#3 

19-02-2013 20:10:40

ment0s-
Petit nouveau
Date d'inscription: 06-04-2011
Messages: 8

Après recherche dans Blender, j'ai trouver la solution  :
Il faut bien recalculer les normales mais, lors de l'export au format .OBJ il faut cocher la case "Include Normales" et le rendu fonctionne sur un cube.

Merci de votre aide en tout cas.
Bon ne soirée.

Hors ligne


#4 

20-02-2013 09:25:12

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

Juste pour infos "Flip direction" veut dire "retourner direction". Ta face est toujours visible mais depuis l'autre côté de celle-ci car, pour rappel, un triangle n'est visible que si on le regarde d'en face.


core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."

Hors ligne


#5 

27-02-2013 21:28:18

ment0s-
Petit nouveau
Date d'inscription: 06-04-2011
Messages: 8

Merci pour les informations.
Une chose est sur c'est que de ce côté le rendu fonctionne.
Merci encore de ton aide. smile

Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
883 membres
1429 sujets
11121 messages
Dernier membre inscrit: Saidov17
114 invités en ligne
Aucun membre connecté
RSS Feed