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 :
#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 ! 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 !
Hors ligne
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".
Hors ligne
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
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
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.
Hors ligne
Merci pour les informations.
Une chose est sur c'est que de ce côté le rendu fonctionne.
Merci encore de ton aide.
Hors ligne