Bonjour tout le monde,
Voilà mon problème, je me suis aperçu que le système de collision d'Irrlicht me réduit grandement mes fps (340fps quand il n'est pas activé et 37 quand il y est). Ceci est extrèmement dérangeant! Je voudrais donc savoir si quelqu'un sait comment je pourrais en faire un moi-même qui ne soit pas aussi gourmand.
Il me faut gérer la gravité, les pentes (glissades), les montées d'escaliers. les sauts.
Le mieux serait que ce système soit dans un thread que je puisse suspendre et relancer selon les besoins.
Dernière modification par johnplayer (04-10-2009 12:25:55)
Hors ligne
Perso, je passes par Newton (2.xx quite à faire).
C'est donc pas du 'perso' (toujours difficile à écrire et encore plus à optimiser) , mais une lib externe, et cela a le mérite d'être efficace, complet et rapide dans le code.
L'un des gros avantage de Newton justement, c'est qu'il sait gérer que les collisions si l'on veut.
En prime, avec quelques fonctions supplémentaire on a de suite de la physique, ce qui est très pratique.
Enfin, il se présente sous la forme d'une lib statique, donc c'est sans douleur et sans lourdeur
Hors ligne
Merci mais j'ai déjà essayé de l'utiliser mais je n'y suis pas arrivé faute d'exemples et de tutos. Sinon il est vrai que c'était la solution que j'avais envisagé au départ. Par contre, si tu as des tutos je serais très intéressé et je réessaierais de l'utilisé.
Hors ligne
Par exemple j'ai tout le code de N3xtD, avec une partie collision faite par Newton 2.xx. Je peux isoler le truc si tu veux, et dans les jours à venir faire un petit truc explicatif si cela
te tente
Hors ligne
Oui ce serait sympa car je rame carrément. Merci pour ton aide car au vu des perf je ne peux pas me permettre d'utiliser les collisions d'irrlicht.
Hors ligne
J'essaie de te faire un truc dès demain, je travaille très très tard en ce moment, donc je ne le te mettrais en ligne que probablement mercredi dans la matinée, mais pas de soucis, je vais pondre un truc le plus simple et clair possible.
Hors ligne
J'avais newton 1.53 avec un tuto, j'ai donc réessayé (il faut mettre de la bonne volonté) et finalement j'ai un début. J'ai initialisé et créé l'update et mon arme(qui est censé jeter des bombes sous formes de boule le fait merveilleusement bien avec les collisions. Maintenant, le problème est que mon world est actuellement en 1 seul mesh mais par la suite il sera divisé en plusieurs mesh.
Je me suis demandé si je pouvais charger, via une petite retouche, tous les triangles de tout les meshs les uns à la suite des autres.
Hors ligne
Bon, je vois que tu as pas mal avancé quand même finalement
Je me suis demandé si je pouvais charger, via une petite retouche, tous les triangles de tout les meshs les uns à la suite des autres.
C'est au choix. Tu peux faire digéré à Newton un seul arbre de collision pour ce qui est de ton monde, ou alors créer plusieurs
arbres en fonction des mesh qui définissent ton monde. Perso en terme de performance, je ne serais te dire ce qui est le mieux.
Si ton monde n'évolue pas, alors pourquoi pas créer effectivement un seul arbre et lui balancer tous les polygones de tes mesh.
Newton semble bien supporter un nombre de polygones important. Quand je lui envoi un terrain complet, soit environ 200.000 polygones, cela se passe bien.
Sinon, petit conseil en passant, passe plutôt par Newton v2.xx, qui est bien mieux optimisé et donc beaucoup plus rapide. En plus, dans la majorité des cas, tu n'a même pas à changer ton code par rapport à la version 1.53 car il sont compatible à 90%
Hors ligne
Ok je vais voir pour la version 2.xx. Pour les arbres, n'y a-t-il pas moyens de les mettre et de les retirer suivant les besoins, comme mon terrain je vais rendre certaines parties visibles et cacher les autres pour gagner en perf donc les meshs du terrain non visibles ne doivent pas etre pris en compte dans les collisions afin d'optimiser le code. De plus, comment faire pour les collisions de la camera?
Et merci encore pour tes réponses.
Hors ligne
En fait, la gestion des collisions t'incombant, cela sera à toi de faire ce qu'il faut pour éliminer de l'arbre de test les éléments non visible ou non souhaités.
Après, si tu glisse ver la partie physique, il y a l'instruction NewtonWorldFreezeBody() qui permet de rendre actif ou non un body dans la gestion de la physique, et donc de soulager le moteur.
Pour ce qui est de la camera, il te suffit de lui assigner un volume anglobant (comme une capsule par exemple) et de la définir à travers Newton, ce qui est bien plus facile que pour un mesh static concave.... (NewtonCreateSphere() ou encore NewtonCreateChamferCylinder() etc...)
Hors ligne
Ok merci pour les précisions. Je vais essayer ça dès que possible.
Hors ligne