Pages: 1
Bonjour a tous,
j'ai un petit soucis de performances et je ne trouve pas de solution simple pour le resoudre:
Je fais un niveau de 100 par 100 qui contient des murs sur les bords et aleatoirement a l'interieur.
un petit exemple de code pour illustrer:
for (int x =0; x <100; x++) for (int y = 0; y < 100; y++) if (x == 0 || x == 99 || y == 0 || y == 99 || rand()%5 == 1) { irr::scene::ISceneNode* cube = smgr->addCubeSceneNode(1); cube->setPosition(irr::core::vector3df(x,y,0)); cube->setAutoCulling(true); cube->setMaterialTexture(0, driver->getTexture("../../media/wall.jpg")); }
Je cree donc environ 2360 cubes soit 30000 polygones au total (6faces*2tri*2360cubes si mon calcul est juste...).
Premier point:
Etant donne que je ne les affiche pas tous dans la camera, y a-t-il un moyen simple de ne pas calculer le rendu de chacun des cubes hors-champs?
Est-ce que j'ai mis trop d'objets a la racine de la scene et qu'elle n'arrive pas a tout tester en meme temps?
Si irrlicht utilise effectivement les BoundingBoxes des elements pour savoir si on devait les afficher ; je pensais utiliser des Empty Nodes dont la BoundingBox encapsuleraient une partie du niveau pour alleger le nombre d'objet par noeud. (pour ceux qui connaissent: structure d'Arbres a N branches ou d'Octree) Mais ce serait assez long et fastidieux a mettre en place Si irrlicht ne le fait pas, promis j'en programme un (quand j'ai le temps) et je le distribue (a moins que quelqu'un ne l'ait deja fait...)
Deuxieme point:
je trouves que mes performances sont assez mauvaises (1500 poly/sec) ; meme si ma machine est assez vieille ca devrait aller...(Athlon 2000+ + 1GoDDR + Radeon 9600)
J'utilise 2 cameras donc admetons 3000 poly/sec, c'est toujours pas terrible...
Quelqu'un aurait-il une idee?
Merci d'avance.
Hors ligne
Pages: 1