#0 

13-08-2013 15:01:48

IssamB
Membre
Date d'inscription: 03-08-2013
Messages: 11

Salut à tous, désolé si le message n'est pas dans la bonne catégorie mais je ne savais pas où le mettre.

J'aimerais savoir quelle est la différence entre le Mesh et le MeshBuffer.
Ce que j'avais cru comprendre, c'est que le MeshBuffer faisait "parti" du Mesh, et que donc , si je voulais déplacer des points du Mesh, je devais modifier le MeshBuffer.
Est-ce que ça marche comme ça? Si oui, comment modifier le MeshBuffer et changer celui du Mesh après modification?

Si ça ne marche pas du tout comme ça, est-ce que vous pourriez m'expliquer? big_smile

Hors ligne


#1 

14-08-2013 00:07:21

Gehogor
Abonné
Lieu: Paris
Date d'inscription: 02-06-2009
Messages: 130
Corrections: 7

Oui, un maillage (mesh) est composé de plusieurs sous-maillages appellés chez Irrlicht "meshBuffer".

Souvent, attention, je suis loin d'être un pro, les maillages que j'importe sont composés de plusieurs "material" qui sont clairement des "meshBuffer" :
--> IMeshBuffer* irr::scene::IMesh::getMeshBuffer(const video::SMaterial & material)

Chez Irrlicht, je ne sais pas pour les autres moteurs graphiques, un maillage ne peut pas dépasser 65564 "index", c'est pourquoi il est pratique de composer un maillage complexe en une composition de plusieurs sous maillages ou plusieurs "material".

Donc, si tu veux modifier le maillage lui même, il faut attaquer ses sous maillages. S'il n'en y a qu'un, tu peux attaquer le sous maillage toujours présent en index "0" avec :
--> IMeshBuffer* irr::scene::IMesh::getMeshBuffer(u32 nr)const

    Hou là là, j'espère ne pas avoir dit de bêtises, j'attends des précisions de mes sensei... Je sais qu'ils veillent toujours.

Dernière modification par Gehogor (14-08-2013 00:07:46)


Et hop... wink

Hors ligne


#2 

14-08-2013 02:36:13

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 904
Corrections: 2
Site web

c'est ça en résumer
une fois que tu a modifier t'est mesh buffer tu call setDirty (EBT_VERTEX_AND_INDEX, EBT_VERTEX ou EBT_INDEX) suivent ce que tu a modifier

pour modifier les mesh buffers très simple ...

Code c++ :


for(irr::u32 i = 0; i<mesh->getMeshBufferCount(); ++i)
    for(irr::u32 j = 0; j<mesh->getMeshBuffer(i)->getVertexCount(); ++j)
        mesh->getMeshBuffer(i)->getPosition(j).Y = 0;
mesh->setDirty(EBT_VERTEX);



note IMesh et IMeshBuffer ont tout deux setDirty, l'un va renvoyer toute les données au gpu l'autre seulement une parti
ne pas oublier setHardwareMappingHint

ps: http://irrlicht.sourceforge.net/docu/cl … uffer.html

Hors ligne


#3 

14-08-2013 09:30:39

IssamB
Membre
Date d'inscription: 03-08-2013
Messages: 11

Merci beaucoup pour vos réponses!
Entre temps, j'avais partiellement répondu  à ma question.
Maintenant je vais pouvoir avancer mon programme

Merci big_smile

Hors ligne


#4 

14-08-2013 12:46:46

IssamB
Membre
Date d'inscription: 03-08-2013
Messages: 11

Une dernière question.
Comment faire pour rendre un vertice particulier invisible?

Hors ligne


#5 

14-08-2013 17:02:41

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 904
Corrections: 2
Site web

tu parcour les indices 3 par 3 et si tu rencontre l'indice équivalent au n° du vertice que tu veut suprimer tu vire les 3
après si tu veut le suprimmer du tableau des vertices, il te faut reconstruire des indices et décrémenter tout les indices > à celui que tu a suprimer
passe par SMeshBuffer tu aura access à

Code c++ :


00283         core::array<T> Vertices; // T = S3DVertex
00285         core::array<u16> Indices;


ça te simplifira la tâche

Hors ligne


#6 

14-08-2013 22:16:02

IssamB
Membre
Date d'inscription: 03-08-2013
Messages: 11

Merci beaucoup!!!!

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
879 membres
1424 sujets
11113 messages
Dernier membre inscrit: brendan87
16 invités en ligne
Aucun membre connecté
RSS Feed