Bonjour à tous,
Etant nouveau dans le monde de la 3D, je suis actuellement un tutoriel sur le siteduzéro.
Actuellement, je suis en train d'essayer de gérer les collisions directement avec irrlicht, sans utiliser de moteur physique (tel que newton, ou bullet).
Je ne sais pas comment expliquer mon problème mais je vais tout de même essayé :
Lorsque j'utilise la fonction createCollisionResponseAnimator(), je met la gravité à -1 pour pas me "balader dans l'espace". Or, le problème qui se pose est que quand je la met à cette valeur, ma caméra recule sans cesse. Lorsque je met cette valeur à 0, la collision entre les murs et la caméra est détecter, mais je ne suis pas on va dire, "cloué au sol".
Voici le code source de mon fichier main.cpp :
Voila, je ne sais pas comment faire exactement, et si vous avez compris mon problème.
Bonne soirée à tous
Hors ligne
Je croie que le problème viens du fait que tu tente d'utiliser un variable qui à était "droper" (détruite je croie).
Il faudrait placer la ligne selector->drop(); juste avent la boucle de rendue.
Hors ligne
Non, je pense pas que le drop est un rapport quelconque avec le problème. Le drop est là pour diminuer la valeur du compteur de référence de l'objet, et éventuellement le détruire si ce compteur atteint 0. Sans le drop, tout ce qu'il risque, c'est une fuite mémoire, pas un bug.
Je pense pour plusieurs idées dans ton cas :
- Si la caméra recule, ça semble vouloir dire que ta gravité n'est pas dirigée vers le bas, mais dans une autre direction. C'est un peu bizarre. Ou alors c'est que tu es sur un terrain en pente, et donc la gravité t'emmène vers le bas de la pente, donc te fait reculer. Peut être en diminuant ton facteur -1 (par exemple à -0.1)
- Si la caméra descend, là je pense que ça peut être réglé en donnant une bonne enveloppe à ta caméra. Quand tu fais ton createCollisionResponseAnimator, le 3ème et le 5ème paramètres vont servir à définir l'enveloppe physique de la caméra. Le 3ème définit les rayons d'un ellipsoide autour de ta caméra (qui est donc au centre). En gros, ça revient à dire que tu définis la taille de ton personnage pour savoir quand est-ce qu'il va se cogner. Dans ton code, tu as défini un personnage qui fait 1 de rayon dans chacune des directions. (une boule en fait). Le 5ème argument sert à placer ta caméra par rapport au centre de cet ellipsoide. Si tu le laisse à {0,0,0}, ta caméra sera au centre du personnage, ce qui correspond au ventre. En général, on veut le mettre un peu plus haut, donc plutot au niveau des yeux. Donc on va mettre une valeur du genre {0,1,0}.
Je pense que dans ton cas, le problème est surtout la définition des rayons de ton ellipsoide.
Hors ligne
J'ai essayé ce que tu m'as dis de faire mmorpglefilm. ça fonctionne correctement maintenant ma caméra ne traverse plus du tout la scene, et aucun recule. La gravité est bonne. Merci de votre aide en tout cas ! (Je reviendrai sans doute dans pas longtemps pour d'autre problèmes lol)
Bonne soirée
Hors ligne
Au temps pour moi, j'avais pas vu en effet que tu avais fait un drop du selector avant le createCollisionResponseAnimator(), effectivement, mmorpglefilm avait raison.
Hors ligne
"Je reviendrai sans doute dans pas longtemps pour d'autre problèmes lol"
Souvenir souvenir.
Hors ligne