#0 

28-05-2011 20:04:12

HenriB
Petit nouveau
Date d'inscription: 28-05-2011
Messages: 4
Corrections: 1

Bonsoir, je débute sous irrlicht et c'est mon premier post à ce forum.
J'ai donc un problème de compilation sur un code très basique:


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

GameLoop()
{
        camera->setPosition(meshNode.getPosition());
        camera->setRotation(meshNode.getRotation());
}

int main(void) {

    irr::IrrlichtDevice *device = irr::createDevice (
    irr::video::EDT_OPENGL,
    irr::core::dimension2d<irr::u32>(800,600),
    32,
    true,
    true,
    false,
    0);

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

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

irr::scene::IAnimatedMeshSceneNode *meshNode =
    meshNode = smgr->addAnimatedMeshSceneNode (smgr->getMesh ("./plan.obj"));

  meshNode->setMaterialFlag(
    irr::video::EMF_LIGHTING, false);
  meshNode->setMaterialTexture(
    0, driver->getTexture("terrain-texture.jpg"));

  meshNode->setMD2Animation(irr::scene::EMAT_STAND);


    irr::scene::ImeshSceneNode* cube =
        smgr->addCubeSceneNode(
            10.0f,
            0,
            -1,
            irr::core::vector3df(
                0.0f,
                0.0f,
                20.0f));

    cube->setMaterialFlag(irr::video::EMF_WIREFRAME, true);


    irr::SKeyMap keyMap[5];
    keyMap[0].Action = irr::EKA_MOVE_FORWARD;
    keyMap[0].KeyCode = irr::KEY_KEY_Z;
    keyMap[1].Action = irr::EKA_MOVE_BACKWARD;
    keyMap[1].KeyCode = irr::KEY_KEY_S;
    keyMap[2].Action = irr::EKA_STRAFE_LEFT;
    keyMap[2].KeyCode = irr::KEY_KEY_Q;
    keyMap[3].Action = irr::EKA_STRAFE_RIGHT;
    keyMap[3].KeyCode = irr::KEY_KEY_D;
    keyMap[4].Action = irr::EKA_JUMP_UP;
    keyMap[4].KeyCode = irr::KEY_SPACE;

    irr::scene::ICameraSceneNode *camera;
    camera = smgr->addCameraSceneNodeFPS(
        0,
        100.0f,
        0.1f,
        -1,
        keyMap,
        5);


    irr::video::SColor color(
        255,
        255,
        255,
        255);



    while (device->run()) {
        driver->beginScene(true, true, color);

        sceneManager->drawAll ();

        driver->endScene ();
    }

    device->drop ();
    return 0;
}


Ce code me permettra normalement que la caméra suive mon mesh mais j'ai un problème de compilation à la ligne:  GameLoop()

Pourtant je ne vois pas ce qui cloche.

Merci beaucoup de vous pencher sur mon code parce que c'est pas toujours facile de comprendre le code des autres!

Hors ligne


#1 

28-05-2011 22:16:33

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 899
Corrections: 1
Site web

camera et meshNode sont des variables non définie que se soit en interne ou en externe a ta fonction GameLoop
il faudrai faire passer c'est dernier en paramtre de ta fonction a la rigeur wink

GameLoop(irr::scane::ICameraSceneNode*camera, ISceneNode*meshNode)
{
        camera->setPosition(meshNode->getPosition());
        camera->setRotation(meshNode->getRotation());
}
sinon metre la camera en parent a meshNode, le parent permait de definir des positions et rotations relative a un notre node
camera->setParent(meshNode);

tu remarque également que j'utilise un pointeur pour meshNode (ce que tu ne fait pas dans GameLoop) ... les nodes sont généré dynamiquement donc ne j'amais utiliser de variable 'local'
aprofondi tes connaissant en c++ serait intéraissant smile

edit: syntaxe
bonne soiré

Dernière modification par Magun (28-05-2011 22:17:26)

Hors ligne


#2 

28-05-2011 22:24:17

HenriB
Petit nouveau
Date d'inscription: 28-05-2011
Messages: 4
Corrections: 1

merci de ta réponse! Faut-il placer GameLoop à l'intérieur de la boucle de rendu?

Hors ligne


#3 

28-05-2011 22:31:27

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 899
Corrections: 1
Site web

oui, pour metre a jours la position de la camera

Hors ligne


#4 

28-05-2011 22:43:43

HenriB
Petit nouveau
Date d'inscription: 28-05-2011
Messages: 4
Corrections: 1

merci mais j'ai toujours une erreur de compilation à la même ligne. Ce qui est bizarre c'est de déclarer 2 fois les 2 pointeurs. Même en les déclarant 1 fois ça ne marche pas. Merci de ton aide.
Voici maintenant mon code:



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






int main(void) {

    irr::IrrlichtDevice *device = irr::createDevice (
    irr::video::EDT_OPENGL,
    irr::core::dimension2d<irr::u32>(800,600),
    32,
    true,
    true,
    false,
    0);

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

    device->getCursorControl ()-> setVisible (false);
    irr::scene::IAnimatedMeshSceneNode*meshNode;
    meshNode = smgr->addAnimatedMeshSceneNode (smgr->getMesh ("./plan.obj"));

  meshNode->setMaterialFlag(
    irr::video::EMF_LIGHTING, false);
  meshNode->setMaterialTexture(
    0, driver->getTexture("terrain-texture.jpg"));

  meshNode->setMD2Animation(irr::scene::EMAT_STAND);


    irr::scene::ImeshSceneNode* cube =
        smgr->addCubeSceneNode(
            10.0f,
            0,
            -1,
            irr::core::vector3df(
                0.0f,
                0.0f,
                20.0f));

    cube->setMaterialFlag(irr::video::EMF_WIREFRAME, true);


    irr::SKeyMap keyMap[5];
    keyMap[0].Action = irr::EKA_MOVE_FORWARD;
    keyMap[0].KeyCode = irr::KEY_KEY_Z;
    keyMap[1].Action = irr::EKA_MOVE_BACKWARD;
    keyMap[1].KeyCode = irr::KEY_KEY_S;
    keyMap[2].Action = irr::EKA_STRAFE_LEFT;
    keyMap[2].KeyCode = irr::KEY_KEY_Q;
    keyMap[3].Action = irr::EKA_STRAFE_RIGHT;
    keyMap[3].KeyCode = irr::KEY_KEY_D;
    keyMap[4].Action = irr::EKA_JUMP_UP;
    keyMap[4].KeyCode = irr::KEY_SPACE;

    irr::scene::ICameraSceneNode*camera;
    camera = smgr->addCameraSceneNodeFPS(
        0,
        100.0f,
        0.1f,
        -1,
        keyMap,
        5);


    irr::video::SColor color(
        255,
        255,
        255,
        255);



    while (device->run()) {
        driver->beginScene(true, true, color);
GameLoop(irr::scene::ICameraSceneNode*camera, IAnimatedMeshSceneNode*meshNode)
{
        camera->setPosition(meshNode.getPosition());
        camera->setRotation(meshNode.getRotation());
}

        sceneManager->drawAll ();

        driver->endScene ();
    }

    device->drop ();
    return 0;
}

Hors ligne


#5 

28-05-2011 23:07:03

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 899
Corrections: 1
Site web

faire du copier/coller et déplacer du text ne résume pas la programmation ...

quand tu me dit placer GameLoop dans la boucle de rendue j'est comprit un apelle de la fonction
tu devrait dabord combler tes lacunes en c++ avans de commencer un moteur 3d

Code c++ :

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

GameLoop(irr::scene::ICameraSceneNode*camera, IAnimatedMeshSceneNode*meshNode)
{
        camera->setPosition(meshNode->getPosition());
        camera->setRotation(meshNode->getRotation());
}
int main()
{
    irr::IrrlichtDevice *device = irr::createDevice(irr::video::EDT_OPENGL, irr::core::dimension2d<irr::u32>(800,600), 32, true, true, false,0);

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

    device->getCursorControl ()-> setVisible (false);
    irr::scene::IAnimatedMeshSceneNode * = smgr->addAnimatedMeshSceneNode (smgr->getMesh ("./plan.obj"));
    meshNode->setMaterialFlag(irr::video::EMF_LIGHTING, false);
    meshNode->setMaterialTexture(0, driver->getTexture("terrain-texture.jpg"));
    meshNode->setMD2Animation(irr::scene::EMAT_STAND);

    irr::scene::ImeshSceneNode* cube = smgr->addCubeSceneNode(10.0f,0, -1, irr::core::vector3df( 0.0f,0.0f, 20.0f));
    cube->setMaterialFlag(irr::video::EMF_WIREFRAME, true);

    irr::SKeyMap keyMap[5];
    keyMap[0].Action = irr::EKA_MOVE_FORWARD;
    keyMap[0].KeyCode = irr::KEY_KEY_Z;
    keyMap[1].Action = irr::EKA_MOVE_BACKWARD;
    keyMap[1].KeyCode = irr::KEY_KEY_S;
    keyMap[2].Action = irr::EKA_STRAFE_LEFT;
    keyMap[2].KeyCode = irr::KEY_KEY_Q;
    keyMap[3].Action = irr::EKA_STRAFE_RIGHT;
    keyMap[3].KeyCode = irr::KEY_KEY_D;
    keyMap[4].Action = irr::EKA_JUMP_UP;
    keyMap[4].KeyCode = irr::KEY_SPACE;

    irr::scene::ICameraSceneNode *camera = smgr->addCameraSceneNodeFPS( 0, 100.0f, 0.1f, -1, keyMap, 5);

    while (device->run())
    {
        driver->beginScene(true, true, irr::video::SColor(255,255, 255, 255));
             sceneManager->drawAll ();
             GameLoop(camera, meshNode);
        driver->endScene ();
    }
    device->drop ();
    return 0;
}



maintenant réfléchie deux second smile
que va faire la camera "fps" quand tu souhaite bouger ? (via les touche)
tu appuis sur un touche la camera "avance", elle change de position donc, et aussi tot après la camera changent de position par raport à meshNode ( via GameLoop )
a-tu donc beusoin d'une camera fps ?
si tu souhait faire bouger un nodes comme un personnage disons, c'est le nodes qui ce doit de bouger et non à la camera de transmetre les mouvements, elle ne fait que le suivre

et pensse a structuré t'est codes, sa risque de devenir vite illisible sur de gros codes

Dernière modification par Magun (28-05-2011 23:08:32)

Hors ligne


#6 

29-05-2011 08:40:38

HenriB
Petit nouveau
Date d'inscription: 28-05-2011
Messages: 4
Corrections: 1

Merci c'est vrai que je vais un peu vite j'ai commencé le c++ il y a 2 semaines j'ai attaqué le moteur 3D il y a 2 jours. Je fais de l'infographie 3D j'ai donc voulu me déplacer dans ma scène afin de me rendre compte de ce qui ne va pas. Je vais aproffondir le C++ parce qu'il y a pas mal de choses que je ne comprends pas. salut.

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
Analysé par
872 membres
1422 sujets
11104 messages
Dernier membre inscrit: Glider
14 invités en ligne
Aucun membre connecté
RSS Feed