Historique des modifications - Message

Message #10988

Sujet: Adapté mon algo à mon code


Type Date Auteur Contenu
Création du message 01-12-2012 15:26:33 johnplayer
Oui moi non plus je n'ai pas compris grand chose à son code. Du coup, j'avais fais mon propre système de marching cubes.

Je partirais sur une base de ce style:

Code c++ :


enum MATIERE_BLOC
{
	MB_AIR			= 0,	// si aucune matière
	MB_TRANSPARENCE	= 1,	// si le bloc utilise la transparence (l'eau par exemple)
	MB_MATIERE1		= 2,	// si matière 1
	MB_MATIERE2		= 4,	// si matière 2
};
typedef s32 TypeBloc;
/**
	Il est ainsi possible d'utiliser enum MATIERE_BLOC en tant que Flags.
	ex:
	- Un bloc de matière 1 et utilisant la transparence
		-> TypeBloc type = MB_TRANSPARENCE | MB_MATIERE1;
**/

/*  Je te laise implémenté^^.
	Revoir peut-être la surface d'un chunk 
	car pas optimisé tel quel.
*/

class Chunk : public ISceneNode
{
	public:
	//! constructeur par défaut
	Chunk();
	//! constructeur par copie (pour une création rapide de chunks identiques)
	Chunk(const Chunk& other);
	//! destructeur
	virtual Chunk();
	
	
	//! dessine les buffer à l'écran (implémentation de "virtual ISceneNode::render()=0;" )
	void render();
	/**
		Une meilleur méthode serait de ne pas dérivé Chunk de ISceneNode mais
		faire une autre classe dérivée de ISceneNode contenant un tableau de chunk 
		qui effectuerait le rendu en fusionnant au passage les chunks ayant le même matériaux 1 et 2.
		Il serait ainsi possible de tirer parti de la taille des buffers (2^16 vertices), réduire le 
		nombres de Call du driver et d'utiliser le potentiel des VBOs.
	**/

	//! dessine les faces visibles (contact avec un bloc air ou transparent) blocs dans les buffers
	void updateChunk();
	
	
	//! récupère le type d'un bloc
	const TypeBloc& getTypeBloc(const s32& X, const s32& Y, const s32& Z);
	
	
	//! implémentation de OnRegisterSceneNode() et getBoundingBox()
	
	protected:
	//! MEMBRES
	u8 ListeBloc[16][16][25];
	SMeshBuffer *BufferMatiere1, *BufferMatiere2;
	SMaterial Material1, Material2;
	aabbox3df BoundingBox;
	
	//! dessine un bloc
	void drawBloc(const s32& X, const s32& Y, const s32& Z);
}

J'ai mis dans les commentaires une idées pour un meilleur rendement. Voilà, je pense que ça te donneras quelques idées.

Retour

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
230 invités en ligne
membre en ligne: -
RSS Feed