Pages: 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
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
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
edit: syntaxe
bonne soiré
Dernière modification par Magun (28-05-2011 22:17:26)
Hors ligne
merci de ta réponse! Faut-il placer GameLoop à l'intérieur de la boucle de rendu?
Hors ligne
oui, pour metre a jours la position de la camera
Hors ligne
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
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
maintenant réfléchie deux second
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
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
Pages: 1