Tout d'abord bonjour Ca fait une bonne semaine que je me creuse sur la facon de déplacer un personnage en 3D (Node) en fonction de sa rotation, et comme je viens de finir, et de tester que le code est opérationnel, je dépose ce code, car, qui sait, il pourra aider les débutants comme moi ^^
Je ne reposte pas le Timer.h car il provient du tuto de Nabouill dispo ici : href=http://irrlicht-fr.org/lire_tuto.php?id=1299 Très simple d'utilisation, il suffit de créer un vector qui contiendra tout les Waypoints (http://en.wikipedia.org/wiki/Waypoint), de donner des ID qui DOIVENT ETRE TOUTES DIFFERENTES aux Waypoint(voir constructeur), puis créer un Path en lui mettant en parametre un tableau qui contient les ID des Waypoint ou le node doit aller, de lui donner le std::vector qui contient les Waypoints, de lui donner le nombre de Waypoints a parcourir et surtout la vitesse (Nombre d'unités en 1ms), puis de placer path.updatePosition(node); dans la boucle de rendu.
(Le déplacement du node s'effectue grace a l'interpolation de divers vector3df entre le waypoint x et le waypoint x+1, donc mettez des Waypoints si vous avez a parcourir une grande ligne droite par exemple, pour éviter le déplacement saccadé.)
Exemple :
Code c++ :
//Ajout des WayPoints (Waypoint(position, type, IDunique, visible);
worldspawn_waypoints.push_back(Waypoint(irr::core::vector3df(30.6174f, 138.702f, -126.354f), WayPointType::FOLLOW, 0, false));
worldspawn_waypoints.push_back(Waypoint(irr::core::vector3df(24.1609f, 138.702f, -253.591f), WayPointType::FOLLOW, 1, false));
worldspawn_waypoints.push_back(Waypoint(irr::core::vector3df(-91.432f, 138.702f, -253.685f), WayPointType::FOLLOW, 2, false));
//Mise en place du chemin a marcher pour le node
int guids[] = {0, 1, 2};
Path path(guids, worldspawn_waypoints, 3, 30);
//Boucle de rendu
while (device->run())
{
driver->beginScene(true, true, irr::video::SColor(255,0,0,0));
[...]
path.updatePosition(node);
[...]
smgr->drawAll();
driver->endScene();
}
Voila si vous avez besoin d'aide laissez un message ou MPez moi, je répondrai Merci bien et bonne continuation avec IrrLicht
Tout d'abord bonjour Ca fait une bonne semaine que je me creuse sur la facon de déplacer un personnage en 3D (Node) en fonction de sa rotation, et comme je viens de finir, et de tester que le code est opérationnel, je dépose ce code, car, qui sait, il pourra aider les débutants comme moi ^^
Je ne reposte pas le Timer.h car il provient du tuto de Nabouill dispo ici : href=http://irrlicht-fr.org/lire_tuto.php?id=1299 Très simple d'utilisation, il suffit de créer un vector qui contiendra tout les Waypoints (http://en.wikipedia.org/wiki/Waypoint), de donner des ID qui DOIVENT ETRE TOUTES DIFFERENTES aux Waypoint(voir constructeur), puis créer un Path en lui mettant en parametre un tableau qui contient les ID des Waypoint ou le node doit aller, de lui donner le std::vector qui contient les Waypoints, de lui donner le nombre de Waypoints a parcourir et surtout la vitesse (Nombre d'unités en 1ms), puis de placer path.updatePosition(node); dans la boucle de rendu.
(Le déplacement du node s'effectue grace a l'interpolation de divers vector3df entre le waypoint x et le waypoint x+1, donc mettez des Waypoints si vous avez a parcourir une grande ligne droite par exemple, pour éviter le déplacement saccadé.)
Exemple :
Code c++ :
//Ajout des WayPoints (Waypoint(position, type, IDunique, visible);
worldspawn_waypoints.push_back(Waypoint(irr::core::vector3df(30.6174f, 138.702f, -126.354f), WayPointType::FOLLOW, 0, false));
worldspawn_waypoints.push_back(Waypoint(irr::core::vector3df(24.1609f, 138.702f, -253.591f), WayPointType::FOLLOW, 1, false));
worldspawn_waypoints.push_back(Waypoint(irr::core::vector3df(-91.432f, 138.702f, -253.685f), WayPointType::FOLLOW, 2, false));
//Mise en place du chemin a marcher pour le node
int guids[] = {0, 1, 2};
Path path(guids, worldspawn_waypoints, 3, 30);
//Boucle de rendu
while (device->run())
{
driver->beginScene(true, true, irr::video::SColor(255,0,0,0));
[...]
path.updatePosition(node);
[...]
smgr->drawAll();
driver->endScene();
}
Voila si vous avez besoin d'aide laissez un message ou MPez moi, je répondrai Merci bien et bonne continuation avec IrrLicht