Corrections en attentes | Corrections effectuées | Corrections refusées

Historique des corrections effectuées(195)

texte initial correction date

ah ah sa parle architecture j'adort smile
bon perso je ferais le truc en une dizaine de fichier, forcement des que l'on comence a songer a faire un moteur sa deviens un peut volumineux avec pas grand chose

pour que sa reste organiser, il faut forcement des dossier tongue

bon en restant dans un truc modeste ... ( tu fait comme tu veut pour les nom des fichiés, je fait ça vite fait )

Code:

device/device.* device/device_sdl.* // dérivé du device device/device_glut.* // dérivé du device device/device_win.* // dérivé du device device/device_w11.* // dérivé du device node/scene.* // implemente un array<node*> node/light.* // dériver de node node/node.* // base pour les node dériver, ne contient que les donner superflux ( texture, mesh, ... ) node/real.* // node de rendue de mesh ( standar ) node/skybox.* // dériver de node node/geometry.* // class qui va généré les mesh node/mesh.h // juste une structe avec des float* ( vertices, indices, TCoord et ... et normales ) render/draw.* // rendue graphique des élément ( utiliser par les nodes ) render/raytracer.* // implenter dans draw, au final je pensse que c'est le mieux redner/texture.* // chargement intégré pour pas se casser la tête ( tga c'est pas compliquer a charger ) math/vector2d.h math/vector3d.h math/line2d.h math/line3d.h // utiliser par le raytracer math/matrix4.h // utiliser dans le device pour modifier la matrice de perspective, enfin sauf si tu veut utiliser les fonctions standar, donc optionel je pensse math/array.h // pas indispensable, mais dans la "scene" il te faudras utiliser des std::vector et pas des std::array, trop lent

vite fait, je pensse que c'est tout, mais tu veras vite fait que tu voudras rajouter des fonctionnalite ...

ps: ne faire que des headler n'est pas la solusion je dirais même que c'est super emmerdent après, a chaque modif sa va recompiler chaque fichier ou ton headler est inclue, directement ou non

edit: oublier la spec de real

ah ah ça parle architecture j'adore smile
bon perso je ferais le truc en une dizaine de fichiers, forcément dès que l'on commence à songer à faire un moteur ça devient un peu volumineux avec pas grand chose

pour que ça reste organisé, il faut forcément des dossiers tongue

bon en restant dans un truc modeste ... ( tu fais comme tu veux pour les noms des fichiers, je fai ça vite fait )

Code:

device/device.*
device/device_sdl.* // dérivé du device
device/device_glut.* // dérivé du device
device/device_win.* // dérivé du device
device/device_w11.* // dérivé du device
node/scene.* // implémente un array<node*>
node/light.* // dérivé de node
node/node.* // base pour les nodes dérivés, ne contient que les données superflues ( texture, mesh, ... )
node/real.* // node de rendu de mesh ( standard)
node/skybox.* // dérivé de node
node/geometry.* // classe qui va générer les meshs
node/mesh.h // juste une structure avec des float* ( vertices, indices, TCoord et ... et normales )
render/draw.* // rendu graphique des éléments ( utilisé par les nodes )
render/raytracer.* // implémenté dans draw, au final je pense que c'est le mieux
redner/texture.* // chargement intégré pour pas  se casser la tête ( tga c'est pas compliqué à charger )
math/vector2d.h
math/vector3d.h
math/line2d.h
math/line3d.h // utilisé par le raytracer
math/matrix4.h // utilisé dans le device pour modifier la matrice de perspective, enfin sauf si tu veux utiliser les fonctions standard, donc optionnel je pense
math/array.h // pas indispensable, mais dans la "scène" il te faudra utiliser des std::vector et pas des std::array, trop lent

vite fait, je pense que c'est tout, mais tu verras vite fait que tu voudras rajouter des fonctionnalités ...

ps: ne faire que des headesr n'est pas la solution je dirais même que c'est super emmerdant après, à chaque modif ça va recompiler chaque fichier où ton header est inclus, directement ou non

edit: oublié la spec de real

01-09-2010 20:54:31

ha bein oui qu'est ce que je raconte moi hmm
Je comptait faire simple mais en y réfléchissant un peu ça va pas le faire, dans l'exemple tout le code de raytracing est dans une même fonction, mais c'est pas flexible, y a la scène, les lumières, les matériels...... En fait je crois que c'est l'occasion de faire 2 tp en 1, raytracer+ l'organisation en C++, je pense que ça peut être que bénéfique pour les membres comme moi qui sont pas trop branchés POO.
Donc je sais pas trop comment procéder, j'ai sais qu'irrlicht utilise des Interfaces comme tu disait plus haut Magun, mais j'ai peur que ça alourdisse le code ?, enfin je sais pas combien ça va faire de fichiers tout ça, dit moi ce que t'en pense, mais il faudrait peut etre faire aussi des classes: scene, Lumiere, Mesh.... afin que le moteur soit aisément améliorable, sans pour autant qu'il y ai trop de fichier, j'ai d'ailleur fait que des headers justement pour alléger le nb de fichiers.
Comment verrais-tu la chose ?

ha bein oui qu'est ce que je raconte moi hmm
Je comptais faire simple mais en y réfléchissant un peu ça va pas le faire, dans l'exemple tout le code de raytracing est dans une même fonction, mais c'est pas flexible, y a la scène, les lumières, les matériels...... En fait je crois que c'est l'occasion de faire 2 tp en 1, raytracer+ l'organisation en C++, je pense que ça peut être que bénéfique pour les membres comme moi qui sont pas trop branchés POO.
Donc je sais pas trop comment procéder, je sais qu'irrlicht utilise des Interfaces comme tu le disais plus haut Magun, mais j'ai peur que ça alourdisse le code ?, enfin je sais pas combien ça va faire de fichiers tout ça, dis moi ce que t'en pense, mais il faudrait peut-être faire aussi des classes: scene, Lumiere, Mesh.... afin que le moteur soit aisément améliorable, sans pour autant qu'il y ait trop de fichiers, j'ai d'ailleurs fait que des headers justement pour alléger le nombre de fichiers.
Comment verrais-tu la chose ?

01-09-2010 20:50:01

non déclarer le raytracer dans la class de rendue, pas celui de l'ecran

non déclarer le raytracer dans la classe de rendu, pas celui de l'écran

01-09-2010 20:47:21

j'ai pas trop le temps la vite fait 2/3 truc...
virtual permais de redefinir les fonctions sur les class/structure dériver et du coup faire un apelle du style mere->function(); qui fait une sorte de redirection automatique vers fils->function();

le raytracer doit être dériver de draw, pas du device, où le cas échéant être implenter dedans, en protected smile
s'il est implenter faire des fonctions style, enableRaytracerRendering, disable..., isEnabled... getRaytracer, setRaytracer ( au cas ou l'utilisateur veut faire sont propre raytracer dériver )

pour la fonction opengl je penssais a glRasterPos3f, si mais souvenir sont bon retourne une position 2d(screen) d'une position3d, sa peut aider
pour les source je penssais que tu pouvais récupéré mais class device et draw, et de les simplifier quelque peut par exemple mais tu fait comme tu veut wink

j'ai pas trop le temps la vite fait 2/3 truc...
virtual permet de redéfinir les fonctions sur les classes/structures dérivées et du coup faire un appel du style mère->fonction(); qui fait une sorte de redirection automatique vers fils->fonction();

le raytracer doit être dérivé de draw, pas du device, ou le cas échéant être implanté dedans, en protected smile
s'il est implanté faire des fonctions style, enableRaytracerRendering, disable..., isEnabled... getRaytracer, setRaytracer ( au cas où l'utilisateur veut faire sont propre raytracer dérivé )

pour la fonction opengl je pensais à glRasterPos3f qui, si mes souvenirs sont bons, retourne une position 2d(screen) d'une position3d, ça peut aider
pour les sources je pensais que tu pouvais récupérer mes classes device et draw, et les simplifier quelque peu par exemple mais tu fais comme tu veux wink

01-09-2010 20:46:39

Salut Altaïr !
Je pense que le probleme est le fait que ton code qui recrée le node soit situé dans la boucle de rendu car ton ordinateur le recrée a chaque fois. D'autre part, ton fichier 3D peut contenir une erreur de frappe au niveau du nom. Si rien ne marche, ca peut aussi etre parceque tu réécrit

Code:

scene::IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode(model);

alors qu'il suffirait d'un

Code:

node = smgr->addAnimatedMeshSceneNode(model);

smile Voila big_smile Teste et dit moi, je te rerépondrait si tu as besoin smile

Assassin's Creed ca roxx tongue

Salut Altaïr !
Je pense que le problème est le fait que ton code qui recrée le node soit situé dans la boucle de rendu car ton ordinateur le recrée a chaque fois. D'autre part, ton fichier 3D peut contenir une erreur de frappe au niveau du nom. Si rien ne marche, ça peut aussi être parce que tu réécris

Code:

 scene::IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode(model);

alors qu'il suffirait d'un

Code:

 node = smgr->addAnimatedMeshSceneNode(model);

smile Voila big_smile Teste et dit moi, je te rerépondrai si tu as besoin smile

Assassin's Creed ca roxx tongue

28-08-2010 11:12:57

Bonjour, j'ai un perso qui se déplace dans la map BSP donnée avec Irrlicht. J'ai attaché un "ISceneNodeAnimatorCollisionResponse" a ce perso et les collisions marchent parfaitement. Je voudrais modifier un des paramètres de ce collision animator pendant l'exécution, mais lorsque je modifie un paramètre dans la boucle de rendu(que ce soit directement dans la boucle ou par une fonctions appelée dans la boucle), le collision animator ne marche plus du tout et je n'ai donc plus aucune collision.

J'aimerais donc savoir si il y a un moyen de changer un paramètres d'un collision animator au cours du programme. Merci.

Voici mon code si vous voyez une erreur de ma part:
La création du collision animator:

Code c++ :


//Création d'un collision animator pour le personnage
    scene::ISceneNodeAnimatorCollisionResponse* anim;
    if (selector)
    {
        anim = smgr->createCollisionResponseAnimator(selector, playerNode,
                                                    core::vector3df(19, 40.0f, 9.25f),
                                                    core::vector3df(0, -10, 0),
                                                    core::vector3df(0, 18, -1));
        playerNode->addAnimator(anim);
    }



La boucle de rendu, par exemple ici je change la gravité de l'animator avec anim->setGravity, après cela le collision animator ne marche plus du tout.

Code c++ :


//Boucle de rendu
    while(device->run())
    {
        if(device->isWindowActive())
        {
            driver->beginScene(true, true, 0);
            smgr->drawAll();
            gui->drawAll();

            anim->setGravity(core::vector3df(0, -10, 0)); // Modification de la gravité

            time = (f32)device->getTimer()->getTime();
           
            eventReceiver.updateNodePositons(time - lastTime);
            eventReceiver.replaceCamera();
           
            if(time - lastTime < MIN_FRAME_TIME)
            {
                device->sleep((u32)(MIN_FRAME_TIME - (time - lastTime)));
            }
            else
            {
                lastTime = time;
            }

            driver->endScene();           
        }
        else
        {
            device->sleep(500);
        }
    }



J'ai essayé de mettre la modification avant le beginScene, après le beginScene, et après le endScene, mais toujours le même résultat. Par contre si je le fait avant la boucle de rendu, la gravité est changé normalement et le collision animator marche toujours parfaitement.

Bonjour, j'ai un perso qui se déplace dans la map BSP donnée avec Irrlicht. J'ai attaché un "ISceneNodeAnimatorCollisionResponse" à ce perso et les collisions marchent parfaitement. Je voudrais modifier un des paramètres de ce collision animator pendant l'exécution, mais lorsque je modifie un paramètre dans la boucle de rendu(que ce soit directement dans la boucle ou par une fonction appelée dans la boucle), le collision animator ne marche plus du tout et je n'ai donc plus aucune collision.

J'aimerais donc savoir s'il y a un moyen de changer un paramètre d'un collision animator au cours du programme. Merci.

Voici mon code si vous voyez une erreur de ma part:
La création du collision animator:

Code c++ :


//Création d'un collision animator pour le personnage
    scene::ISceneNodeAnimatorCollisionResponse* anim;
    if (selector)
    {
        anim = smgr->createCollisionResponseAnimator(selector, playerNode,
                                                    core::vector3df(19, 40.0f, 9.25f),
                                                    core::vector3df(0, -10, 0),
                                                    core::vector3df(0, 18, -1));
        playerNode->addAnimator(anim);
    }



La boucle de rendu, par exemple ici je change la gravité de l'animator avec anim->setGravity, après cela le collision animator ne marche plus du tout.

Code c++ :


//Boucle de rendu
    while(device->run())
    {
        if(device->isWindowActive())
        {
            driver->beginScene(true, true, 0);
            smgr->drawAll();
            gui->drawAll();

            anim->setGravity(core::vector3df(0, -10, 0)); // Modification de la gravité

            time = (f32)device->getTimer()->getTime();
           
            eventReceiver.updateNodePositons(time - lastTime);
            eventReceiver.replaceCamera();
           
            if(time - lastTime < MIN_FRAME_TIME)
            {
                device->sleep((u32)(MIN_FRAME_TIME - (time - lastTime)));
            }
            else
            {
                lastTime = time;
            }

            driver->endScene();           
        }
        else
        {
            device->sleep(500);
        }
    }



J'ai essayé de mettre la modification avant le beginScene, après le beginScene, et après le endScene, mais toujours le même résultat. Par contre si je le fais avant la boucle de rendu, la gravité est changée normalement et le collision animator marche toujours parfaitement.

28-08-2010 11:09:53

j'en demandai même pas tant, c'est très gentil de ta part, je vais enfin pouvoir avancer (hmmm ou plutôt démarrer mais bon ^^=

merci encore pour ton aide smile

j'en demandais même pas tant, c'est très gentil de ta part, je vais enfin pouvoir avancer (hmmm ou plutôt démarrer mais bon ^^=

merci encore pour ton aide smile

28-08-2010 11:07:10

merci mais j'aurai espéré un petit bout de code pour exemple wink
car j'ai cherché hier soir et je n'ai vraiment pas réussi (je débute vraiment...pour tout ce qui est des camera, event etc je peux me débrouiller avec des tutos mais là y'a pas grand chose qui traite ça)

par contre quand tu dis que le jpg ne support pas la transparence, tu parles bien de l'alpha? pas de la texture à lui appliquer?

merci encore

merci mais j'avais espéré un petit bout de code pour exemple wink
car j'ai cherché hier soir et je n'ai vraiment pas réussi (je débute vraiment...pour tout ce qui est des cameras, event etc je peux me débrouiller avec des tutos mais là y'a pas grand chose qui traite ça)

par contre quand tu dis que le jpg ne supporte pas la transparence, tu parles bien de l'alpha? pas de la texture à lui appliquer?

merci encore

28-08-2010 11:06:35

et bien oui il faut utiliser le flag EMT_TRANSPARENT_ALPHA_CHANNEL, mais l'ordre n'a pas d'importance, que se soit avans ou après quoi que se soit ( enfine après l'initialiasation mais sa je pensse que tu t'en doute )

tu devrait desactiver le flag EMF_FOG aussi, histoire d'être sur, je ne sais plus s'il y est par default ... je ne croix pas mais bon
sinon pour info le jpg/jpeg ne suporte pas la transparence, il te faut passer par un png/tga/bmp ( mais irrlicht ne supporte pas l'alpha en bmp ( mode: argb 32bit ) il me semble, à voir dans les sources ... )
donc du coup, forcement ton éditeur d'image remplace l'alpha channel par une autre couleur smile

et bien oui il faut utiliser le flag EMT_TRANSPARENT_ALPHA_CHANNEL, mais l'ordre n'a pas d'importance, que ce soit avant ou après quoi que ce soit ( enfin après l'initialisation mais ça je pense que tu t'en doutes )

tu devrais désactiver le flag EMF_FOG aussi, histoire d'être sûr, je ne sais plus s'il y est par défaut ... je ne crois pas mais bon
sinon pour info le jpg/jpeg ne supporte pas la transparence, il te faut passer par un png/tga/bmp ( mais irrlicht ne supporte pas l'alpha en bmp ( mode: argb 32bit ) il me semble, à voir dans les sources ... )
donc du coup, forcément ton éditeur d'image remplace l'alpha channel par une autre couleur smile

28-08-2010 11:05:41

oui oui je sais que ce n'est pas utilisable t'en fais pas mis ça dans mon code en me disant "ça marche poooo...) wink

non en fait j'ai du mal m'expliquer: j'arrive créer mon terrain et à mettre la texture principale dessus:

Code c++ :


scene::ITerrainSceneNode* terrain = sceneManager->addTerrainSceneNode(
        "da.bmp",
        0,                   
        -1,                   
        core::vector3df(0.f, 0.f, 0.f),       
        core::vector3df(0.f, 0.f, 0.f),   
        core::vector3df(40.f, 40.f, 40.f),   
        video::SColor ( 255, 255, 255, 255 ),   
        5,                   
        scene::ETPS_17,               
        5                   
        );

    terrain->setMaterialType(video::EMT_DETAIL_MAP);
    terrain->setMaterialTexture(0, driver->getTexture("da_tex.jpg"));

        terrain->setMaterialFlag(video::EMF_LIGHTING, false);


jusque là ça va mais par contre je ne sais pas comment déclarer l'alpha de ma texture "détail" et sa texture associée
je me doute qu'il faut utilser un truc du genre : >setMaterialType(video::EMT_TRANSPARENT_ALPHA_CHANNEL); mais après....

merci pour ton aide en tout cas, c'est bien sympa smile

oui oui je sais que ce n'est pas utilisable t'en fais pas, j'ai mis ça dans mon code en me disant "ça marche poooo...) wink

non en fait j'ai du mal à m'expliquer: j'arrive à créer mon terrain et à mettre la texture principale dessus:

Code c++ :


scene::ITerrainSceneNode* terrain = sceneManager->addTerrainSceneNode(
        "da.bmp",
        0,                   
        -1,                   
        core::vector3df(0.f, 0.f, 0.f),       
        core::vector3df(0.f, 0.f, 0.f),   
        core::vector3df(40.f, 40.f, 40.f),   
        video::SColor ( 255, 255, 255, 255 ),   
        5,                   
        scene::ETPS_17,               
        5                   
        );

    terrain->setMaterialType(video::EMT_DETAIL_MAP);
    terrain->setMaterialTexture(0, driver->getTexture("da_tex.jpg"));

        terrain->setMaterialFlag(video::EMF_LIGHTING, false);


jusque là ça va mais par contre je ne sais pas comment déclarer l'alpha de ma texture "détail" et sa texture associée
je me doute qu'il faut utiliser un truc du genre : >setMaterialType(video::EMT_TRANSPARENT_ALPHA_CHANNEL); mais après....

merci pour ton aide en tout cas, c'est bien sympa smile

28-08-2010 11:03:45
Pages: 1 … 11 12 13 14 15 … 20

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
54 invités en ligne
Aucun membre connecté
RSS Feed