#0 

18-01-2011 10:19:13

thoced
Membre
Date d'inscription: 02-08-2010
Messages: 65

Bonjour à tous,

J'essaye de programmer un petit jeu utilisant le même système que "minecraft" (pour ceux qui ne connaisse pas voici le lien : www.minecraft.net)

En réalité je n'essaye pas de copier le jeu mais d'utiliser le systeme de petit cube pour réaliser ma map.  Cubes qui pourront dans le jeu être supprimés ou rajoutés.

Dans un premier temps j'utilise une Heightmap (image) que je lis.  En fonction des hauteurs de celle-ci, j’affiche un certains nombres de petits cube sur l'axe Z.

* Je pensais dans un premiet temps utiliser une node par cube. En effectuant quelques tests, je me suis rendu compte que l'initialisation d'une zone comportant

une map de 512 *512 cubes a multiplié par un nombre qui variera en fonction de la hauteur du heightmap était beaucoup trop longue.

En d'autres termes l'ajout d'une node par cube n'est pas assez rapide et consomme énormément de ressource (mémoire).

C'est bien dommage car j'ai besoin de pouvoir par exemple supprimer un seul cube dans le jeu ou en rajouter d'autres .


* Je pensais donc alors crée une mesh composé des petits cubes et de l'afficher. De cette manière tout va très vite et je n'utilise qu'un seul node pour l'affichage de ma map. Seul soucis, je n'ai plus accès au petit cube en question et ne peux les faire disparaître un a un .
Je peux bien sure via un TriangleSelector savoir lorsque je touche un vertex mais je n'ai plus la possibilité de faire disparaître un cube à la fois

J’espère avoir été claire dans mon topic

Existe-il une autre façon  de faire ?

Merci d'avance

Hors ligne


#1 

18-01-2011 10:31:46

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

Hmm, je pense globalement voir quel est ton soucis.

pour ce qui est des cubes, si tu passes par la fonction addCubeSceneNode le soucis c'est qu'elle
va créer à chaque fois un cube avec un mesh associé. Ce qui est bien dommage en terme de ressources, surtout
quand on souhaite créer plusieurs centaines de cubes.

perso pour éviter ce genre de boulimie de mémoire je ferais plutôt ce genre de chose

Code:

scene::IMesh *cubeMesh = smgr->getGeometryCreator()->createCubeMesh(core::vector3df(ssize));

scene::ImeshSceneNode *CubeNode = smgr->addMeshSceneNode( cubeMesh);

tu peux créer autant de CubeNode que tu veux, il feront tous référence à un seul mesh, d'ou une énorme économie
de mémoire.
Après, en fonction de tes besoins, à toi de créer les quelques CubeMesh dont tu as besoin et de gérer le truc
en fonction des règle de ton jeux.

Hors ligne


#2 

18-01-2011 10:48:29

thoced
Membre
Date d'inscription: 02-08-2010
Messages: 65

Merci pour ta réponse, je vais tester

Effectivement, pour mes tests, j'utilisais le addCubeSceneNode et effectivement si il créé un mesh a chaque fois, cela va consommer beaucoup de mémoire.

merci

Hors ligne


#3 

18-01-2011 12:52:36

thoced
Membre
Date d'inscription: 02-08-2010
Messages: 65

C mieux mais beaucoup trop lent a l'affichage. Le mieux serait de pouvoir créer
un seul mesh à partir de l'ensemble des cubes mais a nouveau, je n'aurai plus de contrôle sur un cube que je voudrais détruire à moins de pouvoir recharger un nouveau mesh sans le cube en question.

Est- ce possible ?  Si oui est ce que cela sera assez rapide ?

le IMeshManipulator ne permet il pas de le faire ?

merci d'avance ?

Hors ligne


#4 

18-01-2011 13:13:15

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

thoced a écrit:

... petit jeu utilisant le même système que "minecraft" (pour ceux qui ne connaisse pas voici le lien : www.minecraft.net

ton lien ne semble pas fonctionner...

petite question, au niveau de la vue de ton jeux, as-tu une vue global permanante, ou la vue principale est-elle fixée sur une partie de ton level ?

Hors ligne


#5 

18-01-2011 13:31:37

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

C'est bon j'ai trouvé quand même des info sur ce jeux.

En fait, dans ton cas il te faudrait créer des zones d'affichage, un peu comme un octree. L'avantage de manipuler des cubes empilés, c'est que cela simplifie
beaucoup la géométrie.

Tu créé des zones qui contiennent tes cubes (un cube geant servant de conteneur en quelque sorte), avec un AABBOX qui va bien, et tu passe par un AutomaticCulling() en
scene::EAC_FRUSTUM_BOX, et tu verras, tes performance augmenteront et tu garderas ta souplesse d'emplois avec des cubes bien indépendant wink

Hors ligne


#6 

18-01-2011 23:51:38

thoced
Membre
Date d'inscription: 02-08-2010
Messages: 65

Je comprends très bien le découpage en zone mais ce que je ne comprends pas c'est en quoi va t il y avoir une amélioration des performance ?
Irrlicht ne gère t il pas à la base un Octree pour l'affichage des Nodes ???

En d'autre terme, je pensais qu'Irrlicht partitionnait déjà en natif les nodes en les incluant  lui même dans des BoudingBox de plus en plus petit. et Via Un Frustum Culling descendait dans l'arbre octree tant que le bounding box était visible par la caméra et ne descendait pas dans l'arbre si un boudingbox ne l'était pas.

Donc si je comprends bien, Irrlicht affiche les Nodes en  Brut sans optimisation ??

Merci d'avance

Hors ligne


#7 

19-01-2011 08:59:29

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

Pour te faire une idée de comment Irrlicht optimise" l'affichage, affiche le nombre de polygonnes affiché dans ta scene durant l'execution de
ton application, cela te donnera une idée ....
( driver->getPrimitiveCountDrawn(); )

Hors ligne


#8 

19-11-2011 13:56:33

Lagiol
Membre
Date d'inscription: 17-11-2011
Messages: 24

c55.me/minetest/  Tu t'es fait doubler, l'ami.

Dernière modification par Lagiol (19-11-2011 13:56:47)

Hors ligne


#9 

20-11-2011 08:41:32

thoced
Membre
Date d'inscription: 02-08-2010
Messages: 65

oui connaissais aussi lol

Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
Analysé par
872 membres
1423 sujets
11109 messages
Dernier membre inscrit: Glider
10 invités en ligne
Aucun membre connecté
RSS Feed

[ Générée en 0.016 sec., 11 requêtes exécutées ]