#1 

18-01-2011 09:19:13

thoced
Membres
Date d'inscription:
Messages: 65
IP: 91.179.85.209
Courriel

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


#2 

18-01-2011 09:31:46

tmyke
Administrateurs
Avatar de tmyke
Date d'inscription:
Messages: 1025
IP: 92.130.143.169
Courriel

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

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.


Force et sagesse...

Hors ligne


#3 

18-01-2011 09:48:29

thoced
Membres
Date d'inscription:
Messages: 65
IP: 91.179.85.209
Courriel

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


#4 

18-01-2011 11:52:36

thoced
Membres
Date d'inscription:
Messages: 65
IP: 91.179.85.209
Courriel

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


#5 

18-01-2011 12:13:15

tmyke
Administrateurs
Avatar de tmyke
Date d'inscription:
Messages: 1025
IP: 92.130.143.169
Courriel

thoced Ecris:

... 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 ?


Force et sagesse...

Hors ligne


#6 

18-01-2011 12:31:37

tmyke
Administrateurs
Avatar de tmyke
Date d'inscription:
Messages: 1025
IP: 92.130.143.169
Courriel

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


Force et sagesse...

Hors ligne


#7 

18-01-2011 22:51:38

thoced
Membres
Date d'inscription:
Messages: 65
IP: 91.179.85.209
Courriel

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


#8 

19-01-2011 07:59:29

tmyke
Administrateurs
Avatar de tmyke
Date d'inscription:
Messages: 1025
IP: 92.130.143.169
Courriel

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(); )


Force et sagesse...

Hors ligne


#9 

19-11-2011 12:56:33

Lagiol
Membres
Avatar de Lagiol
Date d'inscription:
Messages: 24
IP: 88.163.115.125
Courriel

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


Hors ligne


#10 

20-11-2011 07:41:32

thoced
Membres
Date d'inscription:
Messages: 65
IP: 91.86.186.105
Courriel

oui connaissais aussi lol


Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
168 invités en ligne
membre en ligne: -
RSS Feed