#0 

11-01-2007 13:34:34

Astroknight
Petit nouveau
Date d'inscription: 02-01-2007
Messages: 8

Bonjour, j'ai des connaissances assez basiques du C++ et j'ai voulu essayer la methode  addAnimatedMeshSceneNode pour me familiariser avec irrlicht seulement voilà, j'arrive à compiler le programme mais apres quand je le lance j'ai un access violation (bug de base).

voici le code que j'utilise pour essayer d'afficher le mesh animé :

Code:

...
scene::IAnimatedMesh* m = Device->getSceneManager()->getMesh("Anime.MY3D");

Model = Device->getSceneManager()->addAnimatedMeshSceneNode(m);
Model->setMaterialFlag(video::EMF_LIGHTING, false);
Model->setDebugDataVisible(true);
Model->setAnimationSpeed(30);
...

si quelqu'un voit l'erreur et que ça saute aux yeux, merci d'avance

Hors ligne


#1 

11-01-2007 14:29:50

Copland
Modérateur
Lieu: ZarbiLand
Date d'inscription: 22-09-2006
Messages: 657
Site web

Salut, essaye avec ça :

Code:

scene::IAnimatedMesh* m = Device->getSceneManager()->getMesh("Anime.MY3D");

IAnimatedMeshSceneNode* Model = Device->getSceneManager()->addAnimatedMeshSceneNode(m);
Model->setMaterialFlag(video::EMF_LIGHTING, false);
Model->setDebugDataVisible(true);
Model->setAnimationSpeed(30);

Et contrôle bien que le fichier Anime.MY3D est bien au même endroit que l'executable.
Sinon que dit la console derrière, ça peut aider de savoir ce qu'elle renvoit.


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#2 

11-01-2007 21:02:02

Astroknight
Petit nouveau
Date d'inscription: 02-01-2007
Messages: 8

Je viens de tester ton code, le probleme c'est que le bug semble provenir de l'instruction

Code:

scene::IAnimatedMesh* m = Device->getSceneManager()->getMesh("Anime.MY3D");

enfin c'est là que le deboggeur de VC6 se place quand j'ai le violation error.
Le fichier MY3D est bien dans le meme repertoire que le programme et en ce qui concerne la console il affiche la version de irrlicht et la liste des pilotes utilisés (Dx9 et ma carte graphique)
apres il n'y a pas d'erreurs de chargement, si ce n'est le message d'erreur window avec le rapport d'erreurs en hexa

Hors ligne


#3 

11-01-2007 23:50:50

Copland
Modérateur
Lieu: ZarbiLand
Date d'inscription: 22-09-2006
Messages: 657
Site web

Tu  peux poster la totalité du code ?
Ah et aussi met voir ta config au cas ou.


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#4 

13-01-2007 16:36:57

Astroknight
Petit nouveau
Date d'inscription: 02-01-2007
Messages: 8

Code:

#include <irrlicht.h>
#include <iostream>

using namespace irr;
#pragma comment(lib, "Irrlicht.lib")


using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;

IrrlichtDevice *Device = 0;

int main()
{
    
    video::E_DRIVER_TYPE driverType;

    printf("Please select the driver you want for this example:\n"\
        " (a) Direct3D 9.0c\n (b) Direct3D 8.1\n (c) OpenGL 1.5\n"\
        " (d) Software Renderer\n (e) Apfelbaum Software Renderer\n"\
        " (f) NullDevice\n (otherKey) exit\n\n");

    char i;
    std::cin >> i;

    switch(i)
    {
        case 'a': driverType = video::EDT_DIRECT3D9;break;
        case 'b': driverType = video::EDT_DIRECT3D8;break;
        case 'c': driverType = video::EDT_OPENGL;   break;
        case 'd': driverType = video::EDT_SOFTWARE; break;
        case 'e': driverType = video::EDT_SOFTWARE2;break;
        case 'f': driverType = video::EDT_NULL;     break;
        default: return 1;
    }    


    IrrlichtDevice *device =
        createDevice(driverType, core::dimension2d<s32>(640, 480));

    if (device == 0)
        return 1; // could not create selected driver.

    
    video::IVideoDriver* driver = device->getVideoDriver();
    scene::ISceneManager* smgr = device->getSceneManager();


// voila la partie sur laquelle je bosse, le chargement d'un objet 3d animé

    scene::IAnimatedMesh* m = Device->getSceneManager()->getMesh("Anime.MY3D");

    IAnimatedMeshSceneNode* Model = Device->getSceneManager()->addAnimatedMeshSceneNode(m);
    Model->setMaterialFlag(video::EMF_LIGHTING, false);
    Model->setDebugDataVisible(true);
    Model->setAnimationSpeed(30);

//apres ce qui suis provient directement des tuto de irrlicht

    smgr->addCameraSceneNodeFPS();

    
    device->getCursorControl()->setVisible(false);

    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"Meta le gros boulet [";
            str += driver->getName();
            str += "] FPS:";
            str += fps;

            device->setWindowCaption(str.c_str());
            lastFPS = fps;
        }
    }

    device->drop();
    
    return 0;
}

Voila, je code sous visual C++6 et ma config :

intel M70 (centrino)
Radeon X600 64M dédiées
512 DDR2


Pour info j'arrive a compiler et executer les exemples de irrlicht, donc ma config doit suffir largement (surtout pour charger un MY3D de moins d' 1Mo), de plus le debogueur de VC6 trouve l'endroit où il y a erreur (cité plus haut) mais je ne vois pas ce qui provoque ce bug

Hors ligne


#5 

13-01-2007 18:28:03

Jerry Kan
Habitué
Date d'inscription: 21-11-2006
Messages: 265

Astroknight :

[
Voila, je code sous visual C++6 et ma config :

intel M70 (centrino)
Radeon X600 64M dédiées
512 DDR2


ey ! j'ai exactement la meme config (sauf pour la ram)

Hors ligne


#6 

13-01-2007 19:33:24

Copland
Modérateur
Lieu: ZarbiLand
Date d'inscription: 22-09-2006
Messages: 657
Site web

Alors au début tu as un pointer sur Device ....
IrrlichtDevice *Device = 0;

Puis un autre pointer mais cette fois sur device ...
IrrlichtDevice *device = createDevice(driverType, core::dimension2d<s32>(640, 480));

Et là tu fait ça sur un pointer Device qui est = 0 ça va pas ton truc.
scene::IAnimatedMesh* m = Device->getSceneManager()->getMesh("Anime.MY3D");
IAnimatedMeshSceneNode* Model = Device->getSceneManager()->addAnimatedMeshSceneNode(m);

Remplace les Device-> par des device-> plustôt non ? big_smile


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#7 

14-01-2007 14:24:02

Astroknight
Petit nouveau
Date d'inscription: 02-01-2007
Messages: 8

OMG, forcement vu comme ça...

Merci bien, en effet l'erreur viens de là, je n'ai pas encore l'habitude de manipuler les objets de Irrlicht

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
881 membres
1427 sujets
11117 messages
Dernier membre inscrit: Bidule
38 invités en ligne
Aucun membre connecté
RSS Feed