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

Historique des corrections effectuées(195)

texte initial correction date

Bonjour a tous.

Je vous présente mon projet. Un FPS free online. Le projet en est encore qu'a ses début mais pour l'instant ça se passe plutôt pas mal.
Développé avec Irrlicht pour la 3D, Raknet pour la réseau et Irrklang pour le son.
L'idée est de faire un FPS online gratuit pour tous.

En gros, le scenario : Chaque joueur arrive dans une map avec une arme au hasard. Une fois un joueur tué, n'importe qui peut ramasser son arme et continuer sa route. Arme prévue :
Pistolet, mitraillette, couteau, fusille de sniper, batte de baseball, lance flamme, grenade, épée, tronçonneuse, lance roquette, pioche et bien sur le combat a main nue. (en gros hein, ça devrait être plus ou moins ça)

La map sera divisé en plusieurs zone, et de temps en temps une zone sera désactivé, le joueur se trouvant dans cette zone sera mort.(adieu les campeur neutral)

On ne peut pas réapparaitre avant que tout le monde soit mort. Il ne reste que un vainqueur, qui lui renchaine la partie suivante avec les armes donc il dispose a ce moment là.

Ceci n'est pour l'instant qu'une bref présentation, je vous tiendrais informer de l'évolution.
(par chance j'ai déjà trouvé un serveur pour m'héberger smile )

Je vous met une petite vidéo d'un bout de code pour vous donnez une Idée ( par contre, désoler mais je n'ai que 2 mains pour 2 souris et 2 clavier alors ne soyer pas surpris de ne pas voir tout le monde courir en même temps)


A+ tout le monde.

Bonjour a tous.

Je vous présente mon projet. Un FPS free online. Le projet en est encore qu'a ses début mais pour l'instant ça se passe plutôt pas mal.
Développé avec Irrlicht pour la 3D, Raknet pour la réseau et Irrklang pour le son.
L'idée est de faire un FPS online gratuit pour tous.

En gros, le scenario : Chaque joueur arrive dans une map avec une arme au hasard. Une fois un joueur tué, n'importe qui peut ramasser son arme et continuer sa route. Arme prévue :
Pistolet, mitraillette, couteau, fusille de sniper, batte de baseball, lance flamme, grenade, épée, tronçonneuse, lance roquette, pioche et bien sur le combat a main nue. (en gros hein, ça devrait être plus ou moins ça)

La map sera divisée en plusieurs zones, et de temps en temps une zone sera désactivée, le joueur se trouvant dans cette zone sera mort.(adieu les campeurs neutral)

On ne peut pas réapparaitre avant que tout le monde soit mort. Il ne reste qu'un vainqueur, qui lui renchaine la partie suivante avec les armes donc il dispose à ce moment là.

Ceci n'est pour l'instant qu'une brève présentation, je vous tiendrai informer de l'évolution.
(par chance j'ai déjà trouvé un serveur pour m'héberger smile )

Je vous mets une petite vidéo d'un bout de code pour vous donnez une idée ( par contre, désolé mais je n'ai que 2 mains pour 2 souris et 2 clavier alors ne soyez pas surpris de ne pas voir tout le monde courir en même temps)


A+ tout le monde.

25-10-2010 23:34:46

ben je vient de faire t'es modification mais quand je monte et que je tourne a droite ou a gauche il fait une boucle bizard qui n'est pas bon voila le code que j'ai fait

Code:

#include <irrlicht.h> #include "CShieldManager.h" #include "Following_Camera.h" #include "CEventManager.h" using namespace irr; using namespace core; using namespace gui; using namespace video; using namespace scene; void event_manager(MyEventReceiver *receiver, IAnimatedMeshSceneNode *battle_turtle1, ISceneNode* plane) { int rot1 = 0, rot2 = 0; vector3df rot, rrot; rot.Y += 0.7; if(receiver->IsKeyDown(KEY_KEY_Z)) { vector3df facing(cos(battle_turtle1->getRotation().Y * PI/180.0f), -sin(battle_turtle1->getRotation().Z * PI/180.0f), -sin(battle_turtle1->getRotation().Y * PI/180.0f)); facing.normalize(); vector3df newPos = battle_turtle1->getPosition() - (facing + (facing * (f32)0.5f)); battle_turtle1->setPosition(newPos); if(receiver->IsKeyDown(KEY_KEY_Q)) { if (battle_turtle1->getRotation().X <= -30) { rot1 = 0; } else { rot1 = rot1 + 1; } battle_turtle1->setRotation(battle_turtle1->getRotation() + vector3df(-rot1,-rot.Y,0)); } else if(receiver->IsKeyDown(KEY_KEY_D)) { if (battle_turtle1->getRotation().X >= 30) { rot2 = 0; } else { rot2 = rot2 + 1; } battle_turtle1->setRotation(battle_turtle1->getRotation()+ vector3df(rot2,rot.Y,0)); } else if(receiver->IsKeyDown(KEY_KEY_Q) == false && receiver->IsKeyDown(KEY_KEY_D) == false) { if (battle_turtle1->getRotation().X < 0) { rot1 = rot1 + 1; } else if (battle_turtle1->getRotation().X == 0) { rot1 = 0; rot2 = 0; } else if (battle_turtle1->getRotation().X > 0) { rot2 = rot2 - 1; } battle_turtle1->setRotation(battle_turtle1->getRotation() + vector3df(rot1,0,0)); battle_turtle1->setRotation(battle_turtle1->getRotation() + vector3df(rot2,0,0)); } } else if(receiver->IsKeyDown(KEY_KEY_Q)) { if (battle_turtle1->getRotation().X <= -30) { rot1 = 0; } else { rot1 = rot1 + 1; } battle_turtle1->setRotation(battle_turtle1->getRotation()+vector3df(-rot1,-rot.Y,0)); } else if(receiver->IsKeyDown(KEY_KEY_A)) { battle_turtle1->setRotation(battle_turtle1->getRotation()+vector3df(0,0,1)); } else if(receiver->IsKeyDown(KEY_KEY_E)) { battle_turtle1->setRotation(battle_turtle1->getRotation()-vector3df(0,0,1)); } else if(receiver->IsKeyDown(KEY_KEY_D)) { if (battle_turtle1->getRotation().X >= 30) { rot2 = 0; } else { rot2 = rot2 + 1; } battle_turtle1->setRotation(battle_turtle1->getRotation()+ vector3df(rot2,rot.Y,0)); } else if(receiver->IsKeyDown(KEY_KEY_Q) == false && receiver->IsKeyDown(KEY_KEY_D) == false) { if (battle_turtle1->getRotation().X < 0) { rot1 = rot1 + 1; } else if (battle_turtle1->getRotation().X == 0) { rot1 = 0; rot2 = 0; } else if (battle_turtle1->getRotation().X > 0) { rot2 = rot2 - 1; } battle_turtle1->setRotation(battle_turtle1->getRotation() + vector3df(rot1,0,0)); battle_turtle1->setRotation(battle_turtle1->getRotation() + vector3df(rot2,0,0)); } } int main(void) { IrrlichtDevice* device = irr::createDevice(EDT_OPENGL,dimension2d<irr::u32>(1024,768),32,false,false,true); IVideoDriver* driver = device->getVideoDriver (); ISceneManager *sceneManager = device->getSceneManager (); scene::IAnimatedMeshSceneNode *shield_node; sceneManager->addSkyBoxSceneNode( driver->getTexture("Data/skybox/irrlicht2_up.jpg"), driver->getTexture("Data/skybox/irrlicht2_dn.jpg"), driver->getTexture("Data/skybox/irrlicht2_lf.jpg"), driver->getTexture("Data/skybox/irrlicht2_rt.jpg"), driver->getTexture("Data/skybox/irrlicht2_ft.jpg"), driver->getTexture("Data/skybox/irrlicht2_bk.jpg")); scene::ILightSceneNode* lumiere = sceneManager->addLightSceneNode(0,vector3df(500000,0,10000),SColorf(255, 255, 255),5000000.0f); lumiere->getLightData().Type = ELT_POINT; f32 radius = 0.1; u32 duration = 500; video::SColorf impact_color(1,1,1,1); device->getCursorControl ()-> setVisible (true); // curseur invisible scene::IMeshManipulator *manipulator = sceneManager->getMeshManipulator(); CShieldManager *shieldmanager = new CShieldManager(sceneManager,device->getTimer()); scene::ISceneNode * plane = sceneManager->addCubeSceneNode(0.0001f); scene::IAnimatedMeshSceneNode *battle_turtle1 = sceneManager->addAnimatedMeshSceneNode(sceneManager->getMesh("Data/model/dedale/dedale.b3d"), plane); scene::ISceneNode * planet = sceneManager->addSphereSceneNode(5,96); scene::ISceneNode * soleil = sceneManager->addSphereSceneNode(5,96); planet->setScale(vector3df(20,20,20)); planet->setPosition(vector3df(20000,0,0)); soleil->setScale(vector3df(20*18,20*18,20*18)); soleil->setPosition(vector3df(0,0,0)); soleil->setMaterialFlag(EMF_LIGHTING, false); lumiere->setPosition(soleil->getPosition()); battle_turtle1->setScale(core::vector3df(1,1,1)); battle_turtle1->setPosition(core::vector3df(20000,0,100)); battle_turtle1->setMaterialFlag(EMF_LIGHTING, true); shield_node = sceneManager->addAnimatedMeshSceneNode(sceneManager->getMesh("Data/model/dedale/shield_dedale.b3d"),battle_turtle1); shield_node->setMaterialTexture(0,driver->getTexture("Data/textures/water.jpg")); shield_node->setMaterialTexture(1,driver->getTexture("Data/textures/gradient_blinds.png")); planet->setMaterialTexture(0,driver->getTexture("Data/textures/terre.jpg")); soleil->setMaterialTexture(0,driver->getTexture("Data/textures/soleil.png")); manipulator->scaleTCoords(shield_node->getMesh(),core::vector2df(6,6),1); shield_node->setMaterialFlag(video::EMF_BACK_FACE_CULLING,false); shield_node->setScale(core::vector3df(1,1,1)); shield_node->setVisible(false); scene::ITriangleSelector *selector = sceneManager->createTriangleSelector(shield_node->getMesh(),shield_node); selector = sceneManager->createTriangleSelector(shield_node->getMesh(),shield_node); shield_node->setTriangleSelector(selector); selector->drop(); scene::ITriangleSelector *selector1; shieldmanager->addShield(shield_node); FollowingCamera* MaCamera = new FollowingCamera(battle_turtle1, sceneManager,false, 50000,selector1,-3,0.5f,0,vector3df(7,2,0)); // Position initiale. MyEventReceiver receiver; device->setEventReceiver(&receiver); int lastFPS = -1; u32 lastMS = device->getTimer()->getRealTime(); while (device->run()) // la boucle de rendu { u32 difMs = device->getTimer()->getRealTime()-lastMS; lastMS = device->getTimer()->getRealTime(); f32 alignSpeed = difMs/16.0; if(lastMS%(rand()%20+30)==0) { core::vector3df source = vector3df(50,10,50); core::vector3df target = battle_turtle1->getPosition(); const core::line3df ray(source,target); core::vector3df result = shieldmanager->addImpact(shield_node, ray,radius*250,duration,impact_color); core::matrix4 trans = shield_node->getAbsoluteTransformation(); trans.makeInverse(); trans.transformVect(result); } event_manager(&receiver,battle_turtle1,plane ); driver->beginScene(true,true,SColor(0,200,200,200)); MaCamera->Update(); sceneManager->drawAll (); shieldmanager->drawAll(); driver->endScene (); } device->drop (); delete shieldmanager; delete MaCamera; return 0; }

ben je viens de faire tes modifications mais quand je monte et que je tourne à droite ou à gauche il fait une boucle bizarre qui n'est pas bon voilà le code que j'ai fait

Code:

#include <irrlicht.h>
#include "CShieldManager.h"
#include "Following_Camera.h"
#include "CEventManager.h"

using namespace irr;
using namespace core;
using namespace gui;
using namespace video;
using namespace scene;

void event_manager(MyEventReceiver *receiver, IAnimatedMeshSceneNode *battle_turtle1, ISceneNode* plane)
{
    int rot1 = 0, rot2 = 0;
    vector3df rot, rrot;
    rot.Y += 0.7;

    if(receiver->IsKeyDown(KEY_KEY_Z))
    {
        vector3df facing(cos(battle_turtle1->getRotation().Y * PI/180.0f), -sin(battle_turtle1->getRotation().Z * PI/180.0f), -sin(battle_turtle1->getRotation().Y * PI/180.0f));
        facing.normalize();
        vector3df newPos = battle_turtle1->getPosition() - (facing + (facing * (f32)0.5f));
        battle_turtle1->setPosition(newPos);

        if(receiver->IsKeyDown(KEY_KEY_Q))
        {
            if (battle_turtle1->getRotation().X <= -30)
            {
                rot1 = 0;
            }
            else
            {
                rot1 = rot1 + 1;
            }

            battle_turtle1->setRotation(battle_turtle1->getRotation() + vector3df(-rot1,-rot.Y,0));
        }
        else if(receiver->IsKeyDown(KEY_KEY_D))
        {
            if (battle_turtle1->getRotation().X >= 30)
            {
                rot2 = 0;
            }
            else
            {
                rot2 = rot2 + 1;
            }

            battle_turtle1->setRotation(battle_turtle1->getRotation()+ vector3df(rot2,rot.Y,0));
        }
        else if(receiver->IsKeyDown(KEY_KEY_Q) == false && receiver->IsKeyDown(KEY_KEY_D) == false)
        {
            if (battle_turtle1->getRotation().X < 0)
            {
                rot1 = rot1 + 1;
            }
            else if (battle_turtle1->getRotation().X == 0)
            {
                rot1 = 0;
                rot2 = 0;
            }
            else if (battle_turtle1->getRotation().X > 0)
            {
                rot2 = rot2 - 1;
            }

            battle_turtle1->setRotation(battle_turtle1->getRotation() + vector3df(rot1,0,0));
            battle_turtle1->setRotation(battle_turtle1->getRotation() + vector3df(rot2,0,0));
        }
    }
    else if(receiver->IsKeyDown(KEY_KEY_Q))
    {
        if (battle_turtle1->getRotation().X <= -30)
        {
            rot1 = 0;
        }
        else
        {
            rot1 = rot1 + 1;
        }

        battle_turtle1->setRotation(battle_turtle1->getRotation()+vector3df(-rot1,-rot.Y,0));
    }

    else if(receiver->IsKeyDown(KEY_KEY_A))
    {
        battle_turtle1->setRotation(battle_turtle1->getRotation()+vector3df(0,0,1));
    }
    else if(receiver->IsKeyDown(KEY_KEY_E))
    {
        battle_turtle1->setRotation(battle_turtle1->getRotation()-vector3df(0,0,1));
    }

    else if(receiver->IsKeyDown(KEY_KEY_D))
    {
        if (battle_turtle1->getRotation().X >= 30)
        {
            rot2 = 0;
        }
        else
        {
            rot2 = rot2 + 1;
        }

        battle_turtle1->setRotation(battle_turtle1->getRotation()+ vector3df(rot2,rot.Y,0));
    }

    else if(receiver->IsKeyDown(KEY_KEY_Q) == false && receiver->IsKeyDown(KEY_KEY_D) == false)
    {
        if (battle_turtle1->getRotation().X < 0)
        {
            rot1 = rot1 + 1;
        }
        else if (battle_turtle1->getRotation().X == 0)
        {
            rot1 = 0;
            rot2 = 0;
        }
        else if (battle_turtle1->getRotation().X > 0)
        {
            rot2 = rot2 - 1;
        }

        battle_turtle1->setRotation(battle_turtle1->getRotation() + vector3df(rot1,0,0));
        battle_turtle1->setRotation(battle_turtle1->getRotation() + vector3df(rot2,0,0));
    }
}

int main(void)
{

    IrrlichtDevice* device = irr::createDevice(EDT_OPENGL,dimension2d<irr::u32>(1024,768),32,false,false,true);
    IVideoDriver* driver = device->getVideoDriver ();
    ISceneManager *sceneManager = device->getSceneManager ();

    scene::IAnimatedMeshSceneNode *shield_node;

    sceneManager->addSkyBoxSceneNode(
            driver->getTexture("Data/skybox/irrlicht2_up.jpg"),
            driver->getTexture("Data/skybox/irrlicht2_dn.jpg"),
            driver->getTexture("Data/skybox/irrlicht2_lf.jpg"),
            driver->getTexture("Data/skybox/irrlicht2_rt.jpg"),
            driver->getTexture("Data/skybox/irrlicht2_ft.jpg"),
            driver->getTexture("Data/skybox/irrlicht2_bk.jpg"));

    scene::ILightSceneNode* lumiere = sceneManager->addLightSceneNode(0,vector3df(500000,0,10000),SColorf(255, 255, 255),5000000.0f);

    lumiere->getLightData().Type = ELT_POINT;

    f32 radius = 0.1;
    u32 duration = 500;
    video::SColorf impact_color(1,1,1,1);

    device->getCursorControl ()-> setVisible (true);    // curseur invisible

    scene::IMeshManipulator *manipulator = sceneManager->getMeshManipulator();

    CShieldManager *shieldmanager = new CShieldManager(sceneManager,device->getTimer());

    scene::ISceneNode * plane = sceneManager->addCubeSceneNode(0.0001f);
    scene::IAnimatedMeshSceneNode *battle_turtle1 = sceneManager->addAnimatedMeshSceneNode(sceneManager->getMesh("Data/model/dedale/dedale.b3d"), plane);
    scene::ISceneNode * planet = sceneManager->addSphereSceneNode(5,96);
    scene::ISceneNode * soleil = sceneManager->addSphereSceneNode(5,96);

    planet->setScale(vector3df(20,20,20));
    planet->setPosition(vector3df(20000,0,0));
    soleil->setScale(vector3df(20*18,20*18,20*18));
    soleil->setPosition(vector3df(0,0,0));
    soleil->setMaterialFlag(EMF_LIGHTING, false);
    lumiere->setPosition(soleil->getPosition());
    battle_turtle1->setScale(core::vector3df(1,1,1));
    battle_turtle1->setPosition(core::vector3df(20000,0,100));

    battle_turtle1->setMaterialFlag(EMF_LIGHTING, true);
    shield_node = sceneManager->addAnimatedMeshSceneNode(sceneManager->getMesh("Data/model/dedale/shield_dedale.b3d"),battle_turtle1);
    shield_node->setMaterialTexture(0,driver->getTexture("Data/textures/water.jpg"));
    shield_node->setMaterialTexture(1,driver->getTexture("Data/textures/gradient_blinds.png"));
    planet->setMaterialTexture(0,driver->getTexture("Data/textures/terre.jpg"));
    soleil->setMaterialTexture(0,driver->getTexture("Data/textures/soleil.png"));

    manipulator->scaleTCoords(shield_node->getMesh(),core::vector2df(6,6),1);
    shield_node->setMaterialFlag(video::EMF_BACK_FACE_CULLING,false);
    shield_node->setScale(core::vector3df(1,1,1));
    shield_node->setVisible(false);

    scene::ITriangleSelector *selector = sceneManager->createTriangleSelector(shield_node->getMesh(),shield_node);
    selector = sceneManager->createTriangleSelector(shield_node->getMesh(),shield_node);
    shield_node->setTriangleSelector(selector);
    selector->drop();

    scene::ITriangleSelector *selector1;

    shieldmanager->addShield(shield_node);

    FollowingCamera* MaCamera = new FollowingCamera(battle_turtle1, sceneManager,false, 50000,selector1,-3,0.5f,0,vector3df(7,2,0));   // Position initiale.

    MyEventReceiver receiver;
    device->setEventReceiver(&receiver);

    int lastFPS = -1;
    u32 lastMS = device->getTimer()->getRealTime();

    while (device->run())                                // la boucle de rendu
    {
        u32 difMs = device->getTimer()->getRealTime()-lastMS;
        lastMS = device->getTimer()->getRealTime();
        f32 alignSpeed = difMs/16.0;

        if(lastMS%(rand()%20+30)==0)
        {
            core::vector3df source = vector3df(50,10,50);
            core::vector3df target = battle_turtle1->getPosition();

            const core::line3df ray(source,target);

            core::vector3df result = shieldmanager->addImpact(shield_node, ray,radius*250,duration,impact_color);
            core::matrix4 trans = shield_node->getAbsoluteTransformation();
            trans.makeInverse();
            trans.transformVect(result);
        }

        event_manager(&receiver,battle_turtle1,plane );

        driver->beginScene(true,true,SColor(0,200,200,200));
        MaCamera->Update();
        sceneManager->drawAll ();
        shieldmanager->drawAll();
        driver->endScene ();
    }

    device->drop ();
    delete shieldmanager;
    delete MaCamera;
    return 0;
}
25-10-2010 23:32:23

C'est exactement sa et pour les commentaire c'est une habitude que je doit prendre désoler.

C'est exactement ça et pour les commentaires c'est une habitude que je dois prendre désolé.

25-10-2010 23:31:34

ok, si je peut me permettre une petit remarque au passage (mais le prend pas mal) ça manque un peut de commentaire ton code, ça devient un peut difficile à lire (enfin pour moi toujours).

Donc si j'ai bien compris, ton créer un sceneNode "plane" à qui tu attache un autre sceneNode "battle_turtle1".
Tu as une camera qui suit en permanence "battle_turtle1". Avec les touche du clavier, tu change les position de "battle_turtle1". on ne voit pas le code de "FollowingCamera", mais j'imagine que vue que la camera suis "battle_turtle1", quand tu fait une rotation sur "battle_turtle1" la camera en fait autant donc l'effet devient transparent. d'autre par, tu ne bouge jamais "plane", lui il reste à sa position, "battle_turtle1" en est son fils mais se déplace toujours seul, donc l'intérêt ici il n'y en a pas.

Si mon petit résumé est bon, je pense pouvoir corrigé cela en:

ton continu de mettre "battle_turtle1" fils de "plane" mais quand tu bouge, tu bouge "plane" et non plus "battle_turtle1". Par contre quand tu monte ou descend, tu fait une rotation sur "battle_turtle1" sur l'axe X pour que "battle_turtle1" penche en avant ou en arriere.
Et MaCamera ne doit pas suivre "battle_turtle1" mais "plane" (ce que tu avait du faire je pense, mais si pour les déplacement tu déplaçais "battle_turtle1" au lieu de plane, "battle_turtle1" se barrait bien vite et loin donc tu ne le voyait plus)

Je pense que ça devrait rouler (si j'ai bien compris le code et ce que tu voulais faire)

Bon courage!


ps: pense au balise de code http://irrlicht-fr.org/help.php#bbcode

ok, si je peux me permettre une petit remarque au passage (mais le prend pas mal) ça manque un peu de commentaires ton code, ça devient un peu difficile à lire (enfin pour moi toujours).

Donc si j'ai bien compris, tu crées un sceneNode "plane" à qui tu attaches un autre sceneNode "battle_turtle1".
Tu as une camera qui suit en permanence "battle_turtle1". Avec les touches du clavier, tu changes les positions de "battle_turtle1". on ne voit pas le code de "FollowingCamera", mais j'imagine que vu que la camera suit "battle_turtle1", quand tu fais une rotation sur "battle_turtle1" la camera en fait autant donc l'effet devient transparent. d'autre part, tu ne bouges jamais "plane", lui il reste à sa position, "battle_turtle1" en est son fils mais se déplace toujours seul, donc l'intérêt ici il n'y en a pas.

Si mon petit résumé est bon, je pense pouvoir corriger cela en:

tu continues de mettre "battle_turtle1" fils de "plane" mais quand tu bouges, tu bouges "plane" et non plus "battle_turtle1". Par contre quand tu montes ou descends, tu fais une rotation sur "battle_turtle1" sur l'axe X pour que "battle_turtle1" penche en avant ou en arrière.
Et MaCamera ne doit pas suivre "battle_turtle1" mais "plane" (ce que tu avais du faire je pense, mais si pour les déplacements tu déplaçais "battle_turtle1" au lieu de plane, "battle_turtle1" se barrait bien vite et loin donc tu ne le voyais plus)

Je pense que ça devrait rouler (si j'ai bien compris le code et ce que tu voulais faire)

Bon courage!


ps: pense au balise de code http://irrlicht-fr.org/help.php#bbcode

25-10-2010 23:31:09

Excuse moi pour les balises ben quand je dit que sa bug ben la camera ne suit plus le vaisseau et quand je tourne avec le vaisseau ben il disparait. mais avec le code que j'ai mis il a pas de problème mais le vaisseau ne tourne pas comme il faut quand je monte ou descend.

Excuse moi pour les balises ben quand je dit que sa bug ben la camera ne suit plus le vaisseau et quand je tourne avec le vaisseau ben il disparaît. mais avec le code que j'ai mis il a pas de problème mais le vaisseau ne tourne pas comme il faut quand je monte ou descends.

25-10-2010 23:28:37

j'ai deja essaye sa mais le problème c'est que avec la camera 3émé personne que j'ai sans fait un joli bug mais je vais retenter.

bon voila le code que j'ai fait :
#include <irrlicht.h>
#include "CShieldManager.h"
#include "Following_Camera.h"
#include "CEventManager.h"

using namespace irr;
using namespace core;
using namespace gui;
using namespace video;
using namespace scene;

void event_manager(MyEventReceiver *receiver, IAnimatedMeshSceneNode *battle_turtle1)
{
    int rot1 = 0, rot2 = 0;
    vector3df rot, rrot;
    rot.Y += 0.7;

    ISceneNode *plane = battle_turtle1->getParent();

    if(receiver->IsKeyDown(KEY_KEY_Z))
    {
        vector3df facing(cos(battle_turtle1->getRotation().Y * PI/180.0f), -sin(battle_turtle1->getRotation().Z * PI/180.0f), -sin(battle_turtle1->getRotation().Y * PI/180.0f));
        facing.normalize();
        vector3df newPos = battle_turtle1->getPosition() - (facing + (facing * (f32)0.5f));
        battle_turtle1->setPosition(newPos);

        if(receiver->IsKeyDown(KEY_KEY_Q))
        {
            if (battle_turtle1->getRotation().X <= -30)
            {
                rot1 = 0;
            }
            else
            {
                rot1 = rot1 + 1;
            }

            battle_turtle1->setRotation(battle_turtle1->getRotation() + vector3df(-rot1,-rot.Y,0));
        }
        else if(receiver->IsKeyDown(KEY_KEY_D))
        {
            if (battle_turtle1->getRotation().X >= 30)
            {
                rot2 = 0;
            }
            else
            {
                rot2 = rot2 + 1;
            }

            battle_turtle1->setRotation(battle_turtle1->getRotation()+ vector3df(rot2,rot.Y,0));
        }
        else if(receiver->IsKeyDown(KEY_KEY_Q) == false && receiver->IsKeyDown(KEY_KEY_D) == false)
        {
            if (battle_turtle1->getRotation().X < 0)
            {
                rot1 = rot1 + 1;
            }
            else if (battle_turtle1->getRotation().X == 0)
            {
                rot1 = 0;
                rot2 = 0;
            }
            else if (battle_turtle1->getRotation().X > 0)
            {
                rot2 = rot2 - 1;
            }

            battle_turtle1->setRotation(battle_turtle1->getRotation() + vector3df(rot1,0,0));
            battle_turtle1->setRotation(battle_turtle1->getRotation() + vector3df(rot2,0,0));
        }
    }
    else if(receiver->IsKeyDown(KEY_KEY_Q))
    {
        if (battle_turtle1->getRotation().X <= -30)
        {
            rot1 = 0;
        }
        else
        {
            rot1 = rot1 + 1;
        }

        battle_turtle1->setRotation(battle_turtle1->getRotation()+vector3df(-rot1,-rot.Y,0));
    }

    else if(receiver->IsKeyDown(KEY_KEY_A))
    {
        battle_turtle1->setRotation(battle_turtle1->getRotation()+vector3df(0,0,1));
    }
    else if(receiver->IsKeyDown(KEY_KEY_E))
    {
        battle_turtle1->setRotation(battle_turtle1->getRotation()-vector3df(0,0,1));
    }

    else if(receiver->IsKeyDown(KEY_KEY_D))
    {
        if (battle_turtle1->getRotation().X >= 30)
        {
            rot2 = 0;
        }
        else
        {
            rot2 = rot2 + 1;
        }

        battle_turtle1->setRotation(battle_turtle1->getRotation()+ vector3df(rot2,rot.Y,0));
    }

    else if(receiver->IsKeyDown(KEY_KEY_Q) == false && receiver->IsKeyDown(KEY_KEY_D) == false)
    {
        if (battle_turtle1->getRotation().X < 0)
        {
            rot1 = rot1 + 1;
        }
        else if (battle_turtle1->getRotation().X == 0)
        {
            rot1 = 0;
            rot2 = 0;
        }
        else if (battle_turtle1->getRotation().X > 0)
        {
            rot2 = rot2 - 1;
        }

        battle_turtle1->setRotation(battle_turtle1->getRotation() + vector3df(rot1,0,0));
        battle_turtle1->setRotation(battle_turtle1->getRotation() + vector3df(rot2,0,0));
    }
}

int main(void)
{

    IrrlichtDevice* device = irr::createDevice(EDT_OPENGL,dimension2d<irr::u32>(1024,768),32,false,false,true);
    IVideoDriver* driver = device->getVideoDriver ();
    ISceneManager *sceneManager = device->getSceneManager ();

    scene::IAnimatedMeshSceneNode *shield_node;

    sceneManager->addSkyBoxSceneNode(
            driver->getTexture("Data/skybox/irrlicht2_up.jpg"),
            driver->getTexture("Data/skybox/irrlicht2_dn.jpg"),
            driver->getTexture("Data/skybox/irrlicht2_lf.jpg"),
            driver->getTexture("Data/skybox/irrlicht2_rt.jpg"),
            driver->getTexture("Data/skybox/irrlicht2_ft.jpg"),
            driver->getTexture("Data/skybox/irrlicht2_bk.jpg"));

    scene::ILightSceneNode* lumiere = sceneManager->addLightSceneNode(0,vector3df(500000,0,10000),SColorf(255, 255, 255),5000000.0f);

    lumiere->getLightData().Type = ELT_POINT;

    f32 radius = 0.1;
    u32 duration = 500;
    video::SColorf impact_color(1,1,1,1);

    device->getCursorControl ()-> setVisible (true);    // curseur invisible

    scene::IMeshManipulator *manipulator = sceneManager->getMeshManipulator();

    CShieldManager *shieldmanager = new CShieldManager(sceneManager,device->getTimer());

    scene::ISceneNode * plane = sceneManager->addCubeSceneNode(0.0001f);
    scene::IAnimatedMeshSceneNode *battle_turtle1 = sceneManager->addAnimatedMeshSceneNode(sceneManager->getMesh("Data/model/dedale/dedale.b3d"), plane);
    scene::ISceneNode * planet = sceneManager->addSphereSceneNode(5,96);
    scene::ISceneNode * soleil = sceneManager->addSphereSceneNode(5,96);

    planet->setScale(vector3df(20,20,20));
    planet->setPosition(vector3df(20000,0,0));
    soleil->setScale(vector3df(20*18,20*18,20*18));
    soleil->setPosition(vector3df(0,0,0));
    soleil->setMaterialFlag(EMF_LIGHTING, false);
    lumiere->setPosition(soleil->getPosition());
    battle_turtle1->setScale(core::vector3df(1,1,1));
    battle_turtle1->setPosition(core::vector3df(20000,0,100));

    battle_turtle1->setMaterialFlag(EMF_LIGHTING, true);
    shield_node = sceneManager->addAnimatedMeshSceneNode(sceneManager->getMesh("Data/model/dedale/shield_dedale.b3d"),battle_turtle1);
    shield_node->setMaterialTexture(0,driver->getTexture("Data/textures/water.jpg"));
    shield_node->setMaterialTexture(1,driver->getTexture("Data/textures/gradient_blinds.png"));
    planet->setMaterialTexture(0,driver->getTexture("Data/textures/terre.jpg"));
    soleil->setMaterialTexture(0,driver->getTexture("Data/textures/soleil.png"));

    manipulator->scaleTCoords(shield_node->getMesh(),core::vector2df(6,6),1);
    shield_node->setMaterialFlag(video::EMF_BACK_FACE_CULLING,false);
    shield_node->setScale(core::vector3df(1,1,1));
    shield_node->setVisible(false);

    scene::ITriangleSelector *selector = sceneManager->createTriangleSelector(shield_node->getMesh(),shield_node);
    selector = sceneManager->createTriangleSelector(shield_node->getMesh(),shield_node);
    shield_node->setTriangleSelector(selector);
    selector->drop();

    scene::ITriangleSelector *selector1;

    shieldmanager->addShield(shield_node);

    FollowingCamera* MaCamera = new FollowingCamera(battle_turtle1, sceneManager,false, 50000,selector1,-3,0.5f,0,vector3df(7,2,0));   // Position initiale.

    MyEventReceiver receiver;
    device->setEventReceiver(&receiver);

    int lastFPS = -1;
    u32 lastMS = device->getTimer()->getRealTime();

    while (device->run())                                // la boucle de rendu
    {
        u32 difMs = device->getTimer()->getRealTime()-lastMS;
        lastMS = device->getTimer()->getRealTime();
        f32 alignSpeed = difMs/16.0;

        if(lastMS%(rand()%20+30)==0)
        {
            core::vector3df source = vector3df(50,10,50);
            core::vector3df target = battle_turtle1->getPosition();

            const core::line3df ray(source,target);

            core::vector3df result = shieldmanager->addImpact(shield_node, ray,radius*250,duration,impact_color);
            core::matrix4 trans = shield_node->getAbsoluteTransformation();
            trans.makeInverse();
            trans.transformVect(result);
        }

        event_manager(&receiver,battle_turtle1);

        driver->beginScene(true,true,SColor(0,200,200,200));
        MaCamera->Update();
        sceneManager->drawAll ();
        shieldmanager->drawAll();
        driver->endScene ();
    }

    device->drop ();
    delete shieldmanager;
    delete MaCamera;
    return 0;
}

j'ai déjà essayé ça mais le problème c'est que avec la camera 3eme personne que j'ai sans fait un joli bug mais je vais retenter.

bon voila le code que j'ai fait :
#include <irrlicht.h>
#include "CShieldManager.h"
#include "Following_Camera.h"
#include "CEventManager.h"

using namespace irr;
using namespace core;
using namespace gui;
using namespace video;
using namespace scene;

void event_manager(MyEventReceiver *receiver, IAnimatedMeshSceneNode *battle_turtle1)
{
    int rot1 = 0, rot2 = 0;
    vector3df rot, rrot;
    rot.Y += 0.7;

    ISceneNode *plane = battle_turtle1->getParent();

    if(receiver->IsKeyDown(KEY_KEY_Z))
    {
        vector3df facing(cos(battle_turtle1->getRotation().Y * PI/180.0f), -sin(battle_turtle1->getRotation().Z * PI/180.0f), -sin(battle_turtle1->getRotation().Y * PI/180.0f));
        facing.normalize();
        vector3df newPos = battle_turtle1->getPosition() - (facing + (facing * (f32)0.5f));
        battle_turtle1->setPosition(newPos);

        if(receiver->IsKeyDown(KEY_KEY_Q))
        {
            if (battle_turtle1->getRotation().X <= -30)
            {
                rot1 = 0;
            }
            else
            {
                rot1 = rot1 + 1;
            }

            battle_turtle1->setRotation(battle_turtle1->getRotation() + vector3df(-rot1,-rot.Y,0));
        }
        else if(receiver->IsKeyDown(KEY_KEY_D))
        {
            if (battle_turtle1->getRotation().X >= 30)
            {
                rot2 = 0;
            }
            else
            {
                rot2 = rot2 + 1;
            }

            battle_turtle1->setRotation(battle_turtle1->getRotation()+ vector3df(rot2,rot.Y,0));
        }
        else if(receiver->IsKeyDown(KEY_KEY_Q) == false && receiver->IsKeyDown(KEY_KEY_D) == false)
        {
            if (battle_turtle1->getRotation().X < 0)
            {
                rot1 = rot1 + 1;
            }
            else if (battle_turtle1->getRotation().X == 0)
            {
                rot1 = 0;
                rot2 = 0;
            }
            else if (battle_turtle1->getRotation().X > 0)
            {
                rot2 = rot2 - 1;
            }

            battle_turtle1->setRotation(battle_turtle1->getRotation() + vector3df(rot1,0,0));
            battle_turtle1->setRotation(battle_turtle1->getRotation() + vector3df(rot2,0,0));
        }
    }
    else if(receiver->IsKeyDown(KEY_KEY_Q))
    {
        if (battle_turtle1->getRotation().X <= -30)
        {
            rot1 = 0;
        }
        else
        {
            rot1 = rot1 + 1;
        }

        battle_turtle1->setRotation(battle_turtle1->getRotation()+vector3df(-rot1,-rot.Y,0));
    }

    else if(receiver->IsKeyDown(KEY_KEY_A))
    {
        battle_turtle1->setRotation(battle_turtle1->getRotation()+vector3df(0,0,1));
    }
    else if(receiver->IsKeyDown(KEY_KEY_E))
    {
        battle_turtle1->setRotation(battle_turtle1->getRotation()-vector3df(0,0,1));
    }

    else if(receiver->IsKeyDown(KEY_KEY_D))
    {
        if (battle_turtle1->getRotation().X >= 30)
        {
            rot2 = 0;
        }
        else
        {
            rot2 = rot2 + 1;
        }

        battle_turtle1->setRotation(battle_turtle1->getRotation()+ vector3df(rot2,rot.Y,0));
    }

    else if(receiver->IsKeyDown(KEY_KEY_Q) == false && receiver->IsKeyDown(KEY_KEY_D) == false)
    {
        if (battle_turtle1->getRotation().X < 0)
        {
            rot1 = rot1 + 1;
        }
        else if (battle_turtle1->getRotation().X == 0)
        {
            rot1 = 0;
            rot2 = 0;
        }
        else if (battle_turtle1->getRotation().X > 0)
        {
            rot2 = rot2 - 1;
        }

        battle_turtle1->setRotation(battle_turtle1->getRotation() + vector3df(rot1,0,0));
        battle_turtle1->setRotation(battle_turtle1->getRotation() + vector3df(rot2,0,0));
    }
}

int main(void)
{

    IrrlichtDevice* device = irr::createDevice(EDT_OPENGL,dimension2d<irr::u32>(1024,768),32,false,false,true);
    IVideoDriver* driver = device->getVideoDriver ();
    ISceneManager *sceneManager = device->getSceneManager ();

    scene::IAnimatedMeshSceneNode *shield_node;

    sceneManager->addSkyBoxSceneNode(
            driver->getTexture("Data/skybox/irrlicht2_up.jpg"),
            driver->getTexture("Data/skybox/irrlicht2_dn.jpg"),
            driver->getTexture("Data/skybox/irrlicht2_lf.jpg"),
            driver->getTexture("Data/skybox/irrlicht2_rt.jpg"),
            driver->getTexture("Data/skybox/irrlicht2_ft.jpg"),
            driver->getTexture("Data/skybox/irrlicht2_bk.jpg"));

    scene::ILightSceneNode* lumiere = sceneManager->addLightSceneNode(0,vector3df(500000,0,10000),SColorf(255, 255, 255),5000000.0f);

    lumiere->getLightData().Type = ELT_POINT;

    f32 radius = 0.1;
    u32 duration = 500;
    video::SColorf impact_color(1,1,1,1);

    device->getCursorControl ()-> setVisible (true);    // curseur invisible

    scene::IMeshManipulator *manipulator = sceneManager->getMeshManipulator();

    CShieldManager *shieldmanager = new CShieldManager(sceneManager,device->getTimer());

    scene::ISceneNode * plane = sceneManager->addCubeSceneNode(0.0001f);
    scene::IAnimatedMeshSceneNode *battle_turtle1 = sceneManager->addAnimatedMeshSceneNode(sceneManager->getMesh("Data/model/dedale/dedale.b3d"), plane);
    scene::ISceneNode * planet = sceneManager->addSphereSceneNode(5,96);
    scene::ISceneNode * soleil = sceneManager->addSphereSceneNode(5,96);

    planet->setScale(vector3df(20,20,20));
    planet->setPosition(vector3df(20000,0,0));
    soleil->setScale(vector3df(20*18,20*18,20*18));
    soleil->setPosition(vector3df(0,0,0));
    soleil->setMaterialFlag(EMF_LIGHTING, false);
    lumiere->setPosition(soleil->getPosition());
    battle_turtle1->setScale(core::vector3df(1,1,1));
    battle_turtle1->setPosition(core::vector3df(20000,0,100));

    battle_turtle1->setMaterialFlag(EMF_LIGHTING, true);
    shield_node = sceneManager->addAnimatedMeshSceneNode(sceneManager->getMesh("Data/model/dedale/shield_dedale.b3d"),battle_turtle1);
    shield_node->setMaterialTexture(0,driver->getTexture("Data/textures/water.jpg"));
    shield_node->setMaterialTexture(1,driver->getTexture("Data/textures/gradient_blinds.png"));
    planet->setMaterialTexture(0,driver->getTexture("Data/textures/terre.jpg"));
    soleil->setMaterialTexture(0,driver->getTexture("Data/textures/soleil.png"));

    manipulator->scaleTCoords(shield_node->getMesh(),core::vector2df(6,6),1);
    shield_node->setMaterialFlag(video::EMF_BACK_FACE_CULLING,false);
    shield_node->setScale(core::vector3df(1,1,1));
    shield_node->setVisible(false);

    scene::ITriangleSelector *selector = sceneManager->createTriangleSelector(shield_node->getMesh(),shield_node);
    selector = sceneManager->createTriangleSelector(shield_node->getMesh(),shield_node);
    shield_node->setTriangleSelector(selector);
    selector->drop();

    scene::ITriangleSelector *selector1;

    shieldmanager->addShield(shield_node);

    FollowingCamera* MaCamera = new FollowingCamera(battle_turtle1, sceneManager,false, 50000,selector1,-3,0.5f,0,vector3df(7,2,0));   // Position initiale.

    MyEventReceiver receiver;
    device->setEventReceiver(&receiver);

    int lastFPS = -1;
    u32 lastMS = device->getTimer()->getRealTime();

    while (device->run())                                // la boucle de rendu
    {
        u32 difMs = device->getTimer()->getRealTime()-lastMS;
        lastMS = device->getTimer()->getRealTime();
        f32 alignSpeed = difMs/16.0;

        if(lastMS%(rand()%20+30)==0)
        {
            core::vector3df source = vector3df(50,10,50);
            core::vector3df target = battle_turtle1->getPosition();

            const core::line3df ray(source,target);

            core::vector3df result = shieldmanager->addImpact(shield_node, ray,radius*250,duration,impact_color);
            core::matrix4 trans = shield_node->getAbsoluteTransformation();
            trans.makeInverse();
            trans.transformVect(result);
        }

        event_manager(&receiver,battle_turtle1);

        driver->beginScene(true,true,SColor(0,200,200,200));
        MaCamera->Update();
        sceneManager->drawAll ();
        shieldmanager->drawAll();
        driver->endScene ();
    }

    device->drop ();
    delete shieldmanager;
    delete MaCamera;
    return 0;
}

25-10-2010 23:27:43

ok je vois ce que tu veux dire,
Une petite idée (parmis d'autre) tu creer un noeud de scene "noeud1" , tu en crée ensuite un deuxième qui contient ton vaisseau.
tu met le deuxieme en fils de "noeud1".
Tu peut donc tourner ton vaisseau sur l'axe que tu veut, sans modifier l'axe de "noeud1"
ensuite j'imagine que tu controle "noeud1" pour gerer les déplacement"

ok je vois ce que tu veux dire,
Une petite idée (parmi d'autres) tu crées un noeud de scene "noeud1" , tu en crées ensuite un deuxième qui contient ton vaisseau.
tu mets le deuxième en fils de "noeud1".
Tu peut donc tourner ton vaisseau sur l'axe que tu veux, sans modifier l'axe de "noeud1"
ensuite j'imagine que tu contrôles "noeud1" pour gérer les déplacements"

25-10-2010 23:26:37

Pour ma 2eme question je voudrais savoir comment faire pour que les axes de rotation du mesh, de l'objet que je contrôle (vaisseaux spatiale) ne tourne pas avec le mesh.
excuse moi si je m'exprime mal j'ai du mal a le décrire.

Merci pour la première question mais j'ai trouvais par moi meme.

Pour ma 2eme question je voudrais savoir comment faire pour que les axes de rotation du mesh, de l'objet que je contrôle (vaisseaux spatiale) ne tournent pas avec le mesh.
excuse moi si je m'exprime mal j'ai du mal à le décrire.

Merci pour la première question mais j'ai trouvé par moi-même.

25-10-2010 23:25:26

pour ta 1er question jette un oeil par là:
http://irrlicht-fr.org/viewtopic.php?id=1350
void moveCamera(irr::scene::ISceneNode *node, vector3df unite)
ça correspond un peu près à ce que tu veut faire je pense..


Sinon pour ta 2em question, je pas bien compris ce que tu veut faire, ne pas tourner l'axe de quoi ? ton mesh ? ton monde ?....

Pour ta 1ere question jette un œil par là:
http://irrlicht-fr.org/viewtopic.php?id=1350
void moveCamera(irr::scene::ISceneNode *node, vector3df unite)
ça correspond à peu près à ce que tu veux faire je pense..


Sinon pour ta 2eme question, j'ai pas bien compris ce que tu veux faire, ne pas tourner l'axe de quoi ? ton mesh ? ton monde ?....

25-10-2010 23:24:47

Bonjour je cherche le calcule a faire pour que mon mesh avance selon la rotation Y et Z.
c'est à dire quand il est tourner vers le bas (rotation de Z) il avance vers le bas, et quand il regarde vers le haut il avance vers le haut.

Et je voudrai savoir comment faire (si il y a un calcule) pour que les axes de rotation ne tourne pas avec le mesh regarder l'image.
http://i1128.photobucket.com/albums/m49 … r/3d-1.jpg

Voila merci d'avance.

Bonjour je cherche le calcule à faire pour que mon mesh avance selon la rotation Y et Z.
c'est à dire quand il est tourné vers le bas (rotation de Z) il avance vers le bas, et quand il regarde vers le haut il avance vers le haut.

Et je voudrais savoir comment faire (s'il y a un calcul) pour que les axes de rotation ne tournent pas avec le mesh, regardez l'image.
http://i1128.photobucket.com/albums/m49 … r/3d-1.jpg

Voilà merci d'avance.

25-10-2010 23:24:02
Pages: 1 … 7 8 9 10 11 … 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
96 invités en ligne
Aucun membre connecté
RSS Feed