Bonjours a tous !
Cela fait un moment (environs 1mois et demis) que je veut faire tourner ma caméra autour de mon perso.
Je peut récupérer les positions de la caméra et du personnage, si vous pouviez me donner le code en C++ ça serait génial.
Hors ligne
Je ne sais pas si c'est moi mais je pige pas la fin. En tout cas le début est clair, tu veux qu'on fasse le boulot à ta place
Enfin, bon samaritain que je suis je vais t'aider mais commence par nous expliquer ou tu en est. Depuis un mois et demi t'as du avancer un peu non?
Hors ligne
Bon, pour ce qui est de faire tourner un objet autour d'un point, ça je pense que cela doit le faire pour toi.
La ou tu dois plus certainement rencontrer un soucis, c'est d'arriver à faire pointer ta camera dans une direction choisie.
Voici un code qui oriente un node vers un autre (donc aussi une camera vers un node).
Voilà, je pense que cela devrait déjà t'aider
Hors ligne
Ben en fait je ne suis pour l'instant qu'en 3°, donc je n'ai pas les connaissances en math nécessaire.
Pour l'orientation du Node, ça ne pose pas de problème (c'est un caméra que je fait tourner donc il me suffit d'un setTarget(); ), mon problème est bel et bien de faire tourner une caméra autour d'un perso.
Dernière modification par Ilovechocolat (04-11-2009 22:15:30)
Hors ligne
3° ne veut rien dire, je savais faire ça a ton age
bref je vais pas te "mâcher le travail" mais la solution est dans la Trigonométrie, et je sais que c'est a ton programme :-} ( comme dans le code de TMyke )
mais le plus simple et le plus rapide reste les matrices
enfin bon si tu commence la programmation ...
voila le code de la camera de irrlamb http://code.google.com/p/irrlamb/source … .cpp?r=380
mais tu verras vite que rien ne vaux c'est propre codes
Hors ligne
+1 Magun c'est pas beau de demander qu'on te mache le boulot sans avoir chérché avant.
Par contre s'il te faut une explication précise y'a pas de souchis.
Hors ligne
Arrêtez de dire que je veut que vous me mâchez le travail, si je savait le faire je l'aurait fait seul, j'ai essayé et encore essayé mais j'y arrivait pas.
Je n'ai même pas encore appris les vecteurs quand a la trigonométrie, j'ai appris en fouillant dans mon bouquin, j'avais réussit a trouver petit calcul cependant le seul problème c'est que je tombait a chaque fois sur une longueur et jamais sur des coordonnées (je suis au début de l'année de 3°).
Sinon merci pour le code, je vais fouiller dedans .
Et si vous pensez que je suis apte a comprendre une explication je ne suis pas contre (mon problème se situe surtout a la conversion entre longueur et coordonnées).
Hors ligne
Bon, pas de soucis, on va essayer dans ce cas d'y aller en douceur. On va rester dans un environnement 2D pour le moment. Un peu comme si tu regardais ta scene
du dessus. Si tu veux que ta camera tourne autour d'un point, on va donc actualiser en permanence les coordonnées X et Z de ta camera.
Si on considère que ta camera tourne, et que tu connais l'angle de rotation à chaque instant (on va l'appeler ALPHA), alors on peut par exemple écrire ceci:
X = distance * cos(ALPHA)
Z = distance * sin(ALPHA)
La valeur distance est représentative de la distance entre ton point de rotation et ta camera. Facile non ?
Attention, ces coordonnées sont relative, à toi des les ajouter au coordonnées absolues de ta camera.
Hors ligne
Cool, je savait pas que c'était si simple !
Merci !
Hors ligne
Je reposte par ce que ça marche pas, je ne sais pas pourquoi mais irrlicht me fait une grosse rotation une fois puis s'arrête de rotationner.
long distance = sqrt(pow(posCamera->X, 2) + pow(posCamera->Z, 2)); posCamera->X = distance * cos(0.5); posCamera->Z = distance * sin(0.5);
posCamera est un irr::core::vector3df qui correspond a la position de ma caméra par rapport a mon perso, elle est a chaque fois additionné a la position de mon perso.
Hors ligne
aller on va fouiller un peut dans mais vieux codes pour me remémorer la chose ... ... alors att 2sec .... ... ( 37 dossier plus tard ) ... ... ...
on connais 2 vecteur et une valeur (distance) c'est bien cela ?
donc pour avoir la position de ta camera par rapport ah ton node "visé"
il faut calculer comme TMyke le précise, la position X, et Z via la rotation Y du node
imaginons la fonction suivante :
void updateRpgCameraFromPos(vector3df& newPos = vector3df(0,0,0)) { float distance = 12.f; //utilise les event mousse.weel si tu veut t'amuser ... vector3df NodePos = target->getPosition(); vector3df CamRot = came->getRotation(); newPos.X += distance * cos(CamRot.Y); newPos.Z += distance * sin(CamRot.Y); newPos.Y += 0.f; //diminue ou augmente la valeur si tu veut que cela soit plus ou moin haut par rapport au node newPos += NodePos; //comme ça la nouvelle position seras a partir de la position du node et non de 0 came->setPosition(newPos); came->setTarget(NodePos); }
jusque la ses claire ?
mais dit si je me trompe ... je n'utilise pas du tout se système ...
maintenant pour calculer la position en hauteurs il faut varier la distance suivant la rotation X (?) et changer la position Y de newPos ...
oui on change distance pour faire en sorte que la camera bouge autour d'une sphere enfin avis personnel aucunne obligation pour cela
bon tu nous diras si ta bien compris jusque la .. pasque bon ...
et j'espere que je me suis pas gourer (oui encore)
si c'est bon on expliqueras la suite
edit : a la rigueur TMyke cela pourrais faire un "tuto" ... c'est une question souvent demander il me semble
ps : serais tu faire la class en c++ ? vue que tu commence il serais bon que tu commence par ceux-ci et les templates (avis personnel )
Dernière modification par Magun (06-11-2009 04:15:39)
Hors ligne
Ca m'a l'air parfait magun. Et bien optimisé de surcroit
Hors ligne