Historique des modifications - Message

Message #7445

Sujet: [irrnewt] pointeur NULL


Type Date Auteur Contenu
Dernière modification 24-11-2009 18:02:04 T6D98U
la question n'est pas le mien (j'ai quand même vérifié en créant une app avec juste l'initialisation même pas la boucle de rendu ni rien ça plante toujours). mais bon voilà:

data.h

Code c++ :


    class Data
    {
        public:
        Data()
        {
            device = irr::createDevice(irr::video::EDT_OPENGL,irr::core::dimension2d<irr::u32>(800,600),32,false,true,false,0);
            driver = device->getVideoDriver();
            sceneManager = device->getSceneManager();
            gui = device->getGUIEnvironment();

            irr::SKeyMap keyMap[5];
            //forward
            keyMap[0].Action = irr::EKA_MOVE_FORWARD;
            keyMap[0].KeyCode = irr::KEY_KEY_Z;
            //backward
            keyMap[1].Action = irr::EKA_MOVE_BACKWARD;
            keyMap[1].KeyCode = irr::KEY_KEY_S;
            //left
            keyMap[2].Action = irr::EKA_STRAFE_LEFT;
            keyMap[2].KeyCode = irr::KEY_KEY_Q;
            //right
            keyMap[3].Action = irr::EKA_STRAFE_RIGHT;
            keyMap[3].KeyCode = irr::KEY_KEY_D;
            //jump
            keyMap[4].Action = irr::EKA_JUMP_UP;
            keyMap[4].KeyCode = irr::KEY_SPACE;
            camera = sceneManager->addCameraSceneNodeFPS(0, 100.0f, 0.5f, -1, keyMap, 5, true,  2.0);
            camera->setPosition(irr::core::vector3df(0.f,196.f,0.f));
            curseur = device->getCursorControl();
            worldUp = irr::core::vector3df(0,1,0);

            world = irr::newton::createWorld(data.device);

            sounds = irrklang::createIrrKlangDevice();
        }
        virtual ~Data()
        {
            device->drop();
            sounds->removeAllSoundSources();
            sounds->drop();
            delete world;
        }
        
        irr::IrrlichtDevice *device;
        irr::video::IVideoDriver* driver;
        irr::scene::ISceneManager *sceneManager;
        irr::scene::ICameraSceneNode *camera;
        irr::gui::IGUIEnvironment *gui;
        irr::gui::ICursorControl *curseur;
        irr::newton::IWorld *world;
        irrklang::ISoundEngine *sounds;
        irr::core::vector3df worldUp;
        DLGUIManager *guiManager;
    };


window.h

Code c++ :


#ifndef WINDOW_H_INCLUDED
#define WINDOW_H_INCLUDED

#include "3D\\mesh.h"
#include "3D\\datas.h"
#include "3D\\actions.h"
#include "GUI\\dgui.h"

    class Window : public irr::IEventReceiver
    {
        public:
        Window();
        ~Window();
        virtual bool OnEvent(const irr::SEvent &event);
        void run();

        protected:
        void init();

        enum{AMBIENT = 443, DIFFUSE, SPECULAR};
        enum{BOX = 215,CYLINDER,MESH,POINT,RING,SPHERE};
        void draw2D(string src,unsigned int x,unsigned int y,unsigned int w = 0,unsigned int h = 0,
                    unsigned int ccr = 255,unsigned int ccg = 255,unsigned int ccb = 255,
                    unsigned int r = 255,unsigned int g = 255,unsigned int b = 255,unsigned int a = 255);

        void light(float r,float g,float b,float a,int flags = AMBIENT,
        irr::core::vector3df v = irr::core::vector3df(0,0,0),float radius = 100.f,
        irr::video::E_LIGHT_TYPE type = irr::video::ELT_POINT,irr::core::vector3df dir = irr::core::vector3df(0,-1,0),
        float sr = 0.0,float sg = 0.0,float sb = 0.0,float sa = 0.0);

        protected:
        bool boucle;
        vector<Mesh*>   objects;
        vector<Action>  actions;

        Materials materials;
    };


window.cpp

Code c++ :


#include "window.h"

    extern Data data;

    Window::Window() : boucle(true)
    {
        materials = *initMaterials();
        init();
    }
    void Window::init()
    {
        data.curseur->setVisible(false);

        Particle::Ball fire(irr::core::vector3df(0.f,128.f,0.f),irr::core::vector3df(0.f,0.05f,0.f));
        fire.setRadius(2.f);
        fire.setLife(100,500);
        fire.setSize(irr::core::dimension2df(4.f,4.f),irr::core::dimension2df(5.f,5.f));
        fire.setTexture("media/fire.bmp");
        fire.setPartPerSec(300,400);
        fire.setAttractAffector(true,irr::core::vector3df(0.f,256.f,0.f),1.f,true,false,true);
        fire.setFadeOutAffector(irr::video::SColor(0,0,0,0));
        fire.setAngle(0);

        objects.push_back(new Mesh(true,"media/room.3ds",irr::core::vector3df(0,0,0)));
        objects[0]->setTex("media/rockwall.jpg",true,0.004f);
        actions.push_back(Action());
        actions[0].setActive(false);

        objects.push_back(new Mesh(false,"media/sphere.3ds",irr::core::vector3df(0,256,0),10,&materials["sphere"]));
        actions.push_back(Action());
        actions[1].setActive(false);

        objects.push_back(new Mesh(false,"media/sphere.3ds",irr::core::vector3df(0,256,0),9999,&materials["sphere"]));
        actions.push_back(Action());
        actions[2].setActive(false);

        light(0.2,0.2,0.2,1.0,AMBIENT);

        irr::core::stringw titre(data.driver->getFPS());
        data.device->setWindowCaption(titre.c_str());
    }

    Window::~Window()
    {
    }

    bool Window::OnEvent(const irr::SEvent &event)
    {
        if(objects.size() > 0 && objects[0] != 0 && event.EventType == irr::EET_KEY_INPUT_EVENT)
        {
            switch(event.KeyInput.Key)
            {
                case irr::KEY_ESCAPE:
                boucle = false;
                return true;
                break;
            }
        }
        return false;
    }
    void Window::run()
    {
        irr::core::stringw titre(data.driver->getFPS());
        data.device->setWindowCaption(titre.c_str());

        data.device->setEventReceiver(this);
        while(data.device->run() && boucle)
        {
            data.world->update();

            data.driver->beginScene(true, true, irr::video::SColor(0,0,0,0));

            data.sceneManager->drawAll();
            data.gui->drawAll();
            data.driver->endScene();
        }
    }


window2.cpp

Code c++ :


#include "window.h"

    extern Data data;

    void Window::draw2D(string src,unsigned int x,unsigned int y,unsigned int w,unsigned int h,unsigned int ccr,unsigned int ccg,unsigned int ccb,unsigned int r,unsigned int g,unsigned int b,unsigned int a)
    {
        irr::video::ITexture *image = data.driver->getTexture(src.c_str());
        data.driver->makeColorKeyTexture (image, irr::video::SColor(ccr,ccg,ccb,255));
        w = w == 0 ? image->getSize().Width : w;
        h = h == 0 ? image->getSize().Height : h;
        data.driver->draw2DImage(image, irr::core::position2d<irr::s32>(x,y),
                                   irr::core::rect<irr::s32>(0,0,w,h), 0,
                                   irr::video::SColor(r, g, b, a), true);
    }

    void Window::light(float r,float g,float b,float a,int flags,irr::core::vector3df v,float radius,irr::video::E_LIGHT_TYPE type,irr::core::vector3df dir,float sr,float sg,float sb,float sa)
    {
        switch(flags)
        {
            case AMBIENT:
            data.sceneManager->setAmbientLight(irr::video::SColorf(r,g,b,a));
            break;
            case DIFFUSE:
            irr::scene::ILightSceneNode* lumiere = data.sceneManager->addLightSceneNode(0,v,irr::video::SColorf(0.0,0.0,0.0,0.0),radius);
            lumiere->getLightData().DiffuseColor = irr::video::SColorf(r,g,b,a);
            lumiere->getLightData().SpecularColor = irr::video::SColorf(sr,sg,sb,sa);
            break;
        }
    }


et le main:

Code c++ :


#include "3D\\window.h"

int main()
{
    Window window;
    window.run();
    return 0;
}


Il y a pas mal de types indéfinis ici mais si je mettais toutes les sources je me retrouverai à devoir vous copier au moins 50 fichiers.
Création du message 24-11-2009 17:54:16 T6D98U
la question n'est pas le mien (j'ai quand même vérifié en créant une app avec juste l'initialisation même pas la boucle de rendu ni rien ça plante toujours). mais bon voilà:

data.h

Code c++ :


    class Data
    {
        public:
        Data()
        {
            device = irr::createDevice(irr::video::EDT_OPENGL,irr::core::dimension2d<irr::u32>(800,600),32,false,true,false,0);
            driver = device->getVideoDriver();
            sceneManager = device->getSceneManager();
            gui = device->getGUIEnvironment();

            irr::SKeyMap keyMap[5];
            //forward
            keyMap[0].Action = irr::EKA_MOVE_FORWARD;
            keyMap[0].KeyCode = irr::KEY_KEY_Z;
            //backward
            keyMap[1].Action = irr::EKA_MOVE_BACKWARD;
            keyMap[1].KeyCode = irr::KEY_KEY_S;
            //left
            keyMap[2].Action = irr::EKA_STRAFE_LEFT;
            keyMap[2].KeyCode = irr::KEY_KEY_Q;
            //right
            keyMap[3].Action = irr::EKA_STRAFE_RIGHT;
            keyMap[3].KeyCode = irr::KEY_KEY_D;
            //jump
            keyMap[4].Action = irr::EKA_JUMP_UP;
            keyMap[4].KeyCode = irr::KEY_SPACE;
            camera = sceneManager->addCameraSceneNodeFPS(0, 100.0f, 0.5f, -1, keyMap, 5, true,  2.0);
            camera->setPosition(irr::core::vector3df(0.f,196.f,0.f));
            curseur = device->getCursorControl();
            worldUp = irr::core::vector3df(0,1,0);

            world = irr::newton::createWorld(data.device);

            sounds = irrklang::createIrrKlangDevice();
        }
        virtual ~Data()
        {
            device->drop();
            sounds->removeAllSoundSources();
            sounds->drop();
            delete world;
        }
        
        irr::IrrlichtDevice *device;
        irr::video::IVideoDriver* driver;
        irr::scene::ISceneManager *sceneManager;
        irr::scene::ICameraSceneNode *camera;
        irr::gui::IGUIEnvironment *gui;
        irr::gui::ICursorControl *curseur;
        irr::newton::IWorld *world;
        irrklang::ISoundEngine *sounds;
        irr::core::vector3df worldUp;
        DLGUIManager *guiManager;
    };


window.h

Code c++ :


#ifndef WINDOW_H_INCLUDED
#define WINDOW_H_INCLUDED

#include "3D\\mesh.h"
#include "3D\\datas.h"
#include "3D\\actions.h"
#include "GUI\\dgui.h"

    class Window : public irr::IEventReceiver
    {
        public:
        Window();
        ~Window();
        virtual bool OnEvent(const irr::SEvent &event);
        void run();

        protected:
        void init();

        enum{AMBIENT = 443, DIFFUSE, SPECULAR};
        enum{BOX = 215,CYLINDER,MESH,POINT,RING,SPHERE};
        void draw2D(string src,unsigned int x,unsigned int y,unsigned int w = 0,unsigned int h = 0,
                    unsigned int ccr = 255,unsigned int ccg = 255,unsigned int ccb = 255,
                    unsigned int r = 255,unsigned int g = 255,unsigned int b = 255,unsigned int a = 255);

        void light(float r,float g,float b,float a,int flags = AMBIENT,
        irr::core::vector3df v = irr::core::vector3df(0,0,0),float radius = 100.f,
        irr::video::E_LIGHT_TYPE type = irr::video::ELT_POINT,irr::core::vector3df dir = irr::core::vector3df(0,-1,0),
        float sr = 0.0,float sg = 0.0,float sb = 0.0,float sa = 0.0);

        protected:
        bool boucle;
        vector<Mesh*>   objects;
        vector<Action>  actions;

        Materials materials;
    };


window.cpp

Code c++ :


#include "window.h"

    extern Data data;

    Window::Window() : boucle(true)
    {
        materials = *initMaterials();
        init();
    }
    void Window::init()
    {
        data.curseur->setVisible(false);

        Particle::Ball fire(irr::core::vector3df(0.f,128.f,0.f),irr::core::vector3df(0.f,0.05f,0.f));
        fire.setRadius(2.f);
        fire.setLife(100,500);
        fire.setSize(irr::core::dimension2df(4.f,4.f),irr::core::dimension2df(5.f,5.f));
        fire.setTexture("media/fire.bmp");
        fire.setPartPerSec(300,400);
        fire.setAttractAffector(true,irr::core::vector3df(0.f,256.f,0.f),1.f,true,false,true);
        fire.setFadeOutAffector(irr::video::SColor(0,0,0,0));
        fire.setAngle(0);

        objects.push_back(new Mesh(true,"media/room.3ds",irr::core::vector3df(0,0,0)));
        objects[0]->setTex("media/rockwall.jpg",true,0.004f);
        actions.push_back(Action());
        actions[0].setActive(false);

        objects.push_back(new Mesh(false,"media/sphere.3ds",irr::core::vector3df(0,256,0),10,&materials["sphere"]));
        actions.push_back(Action());
        actions[1].setActive(false);

        objects.push_back(new Mesh(false,"media/sphere.3ds",irr::core::vector3df(0,256,0),9999,&materials["sphere"]));
        actions.push_back(Action());
        actions[2].setActive(false);

        light(0.2,0.2,0.2,1.0,AMBIENT);

        irr::core::stringw titre(data.driver->getFPS());
        data.device->setWindowCaption(titre.c_str());
    }

    Window::~Window()
    {
    }

    bool Window::OnEvent(const irr::SEvent &event)
    {
        if(objects.size() > 0 && objects[0] != 0 && event.EventType == irr::EET_KEY_INPUT_EVENT)
        {
            switch(event.KeyInput.Key)
            {
                case irr::KEY_ESCAPE:
                boucle = false;
                return true;
                break;
            }
        }
        return false;
    }
    void Window::run()
    {
        irr::core::stringw titre(data.driver->getFPS());
        data.device->setWindowCaption(titre.c_str());

        data.device->setEventReceiver(this);
        while(data.device->run() && boucle)
        {
            data.world->update();

            data.driver->beginScene(true, true, irr::video::SColor(0,0,0,0));

            data.sceneManager->drawAll();
            data.gui->drawAll();
            data.driver->endScene();
        }
    }


window2.cpp

Code c++ :


#include "window.h"

    extern Data data;

    void Window::draw2D(string src,unsigned int x,unsigned int y,unsigned int w,unsigned int h,unsigned int ccr,unsigned int ccg,unsigned int ccb,unsigned int r,unsigned int g,unsigned int b,unsigned int a)
    {
        irr::video::ITexture *image = data.driver->getTexture(src.c_str());
        data.driver->makeColorKeyTexture (image, irr::video::SColor(ccr,ccg,ccb,255));
        w = w == 0 ? image->getSize().Width : w;
        h = h == 0 ? image->getSize().Height : h;
        data.driver->draw2DImage(image, irr::core::position2d<irr::s32>(x,y),
                                   irr::core::rect<irr::s32>(0,0,w,h), 0,
                                   irr::video::SColor(r, g, b, a), true);
    }

    void Window::light(float r,float g,float b,float a,int flags,irr::core::vector3df v,float radius,irr::video::E_LIGHT_TYPE type,irr::core::vector3df dir,float sr,float sg,float sb,float sa)
    {
        switch(flags)
        {
            case AMBIENT:
            data.sceneManager->setAmbientLight(irr::video::SColorf(r,g,b,a));
            break;
            case DIFFUSE:
            irr::scene::ILightSceneNode* lumiere = data.sceneManager->addLightSceneNode(0,v,irr::video::SColorf(0.0,0.0,0.0,0.0),radius);
            lumiere->getLightData().DiffuseColor = irr::video::SColorf(r,g,b,a);
            lumiere->getLightData().SpecularColor = irr::video::SColorf(sr,sg,sb,sa);
            break;
        }
    }


et le main:

Code c++ :


#include "3D\\window.h"

int main()
{
    Window window;
    window.run();
    return 0;
}


Il y a pas mal de types indéfinis ici mais si je mettais toutes les sources je me retrouverai à devoir vous copier au moins 50 fichiers.

Retour

Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
556 invités en ligne
membre en ligne: -
RSS Feed