#0 

28-05-2011 20:04:12

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

Bonsoir, je dbute sous irrlicht et c'est mon premier post ce forum.
J'ai donc un problme de compilation sur un code trs 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 camra suive mon mesh mais j'ai un problme 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: 902
Corrections: 2
Site web

camera et meshNode sont des variables non dfinie 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 gnr dynamiquement donc ne j'amais utiliser de variable 'local'
aprofondi tes connaissant en c++ serait intraissant smile

edit: syntaxe
bonne soir

Dernire 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 rponse! Faut-il placer GameLoop l'intrieur 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: 902
Corrections: 2
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 mme ligne. Ce qui est bizarre c'est de dclarer 2 fois les 2 pointeurs. Mme en les dclarant 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: 902
Corrections: 2
Site web

faire du copier/coller et dplacer du text ne rsume 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 rflchie 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 aprs 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

Dernire 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 dplacer dans ma scne 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 Caractristiques Statistiques Communaut
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propuls par FluxBB
Traduit par FluxBB.fr
Analys par
872 membres
1423 sujets
11109 messages
Dernier membre inscrit: Glider
5 invits en ligne
Aucun membre connect
RSS Feed

[ Gnre en 0.016 sec., 10 requtes excutes ]