Bonjour,
Pour ceux qui ne le savent pas, je cherche à créer une ville en créant une centaine d'immeubles. Je cherche maintenant à créer un maillage de cette ville pour pouvoir utiliser la physique (j'utilise Newton). J'ai réussi à créer un maillage avec des boites paramétrées de telle manière qu'elles correspondent à mes immeubles mais comme j'ai un rebord sur le toit, il n'était pas pris en compte. Je cherche donc à créer un maillage par vertices pour coller le plus possible à mon idée d'immeuble. Je vais montrer mon code et essayer d'être plus clair :
Création des immeubles : le nombre d'étage en aléatoire mais la surface est constante.
Ensuite j'ai crée deux méthodes, la première (dans la classe irr::scene::Building) qui permet de récupérer les 16 vertices utiles à modeler parfaitement mon immeuble :
La seconde (dans la classe qui gère la physique) est censé (je dis bien censé) mailler chaque immeuble grâce à ces vertices mais il ne se passe rien du tout, comme s'il ne crée rien. PS : Je suis sur que l'erreur vient de cette méthode.
J'ai créé un cube grâce à la physique, mais ce cube traverse mes immeubles.
Est-ce que vous pourriez m'aider ?
Merci d'avance.
Hors ligne
je ne sais pas pour Newton, ça me semble correct, perso j'utilise Bullet
pour NewtonTreeCollisionAddFace il est stipuler:
const NewtonCollision* treeCollision - the pointer to the Tree Collision collision shape.
int vertexCount - number of vertices in vertexPtr
const dFloat *vertexPtr - pointer to an array of vertices. Each vertex should consist of at least 3 floats.
int strideInBytes - size of each vertex in bytes. This value should be 12 or larger.
int faceAttribute - ID that identifies the polygon. The application can use this value to customize the behavior of the collision geometry.
donc NewtonTreeCollisionAddFace(treeCollision, 48, verticesArray, 3*sizeof(float), 0);
après la disposition des floats dans l'array a une importance, également t'est indices, ici je supose que Newton att quelque chose du même ressort que GL_TRIANGLE
donc peut-être que sa bloque de ce coter la
bref, étant donner l'allure de t'est immeuble dans ton précédant poste, pourquoi tu n'utilise pas la bounding box de chaque mesh ?
sur bullet il y a btGImpactCompoundShape pour crée des shapes avec d'autre afin d'optimiser les calcules, basé ta physique sur un mesh est très couteux en calcul, donc regarde de ce coter
avec un peut de recherche je tombe sur NewtonCreateCompoundCollision
l'intérét majeur c'est quand vachement plus simple et plus optimiser,
chaque immeuble crée sont NewtonBox qui est ajouter automatiquement dans ton NewtonCompoundCollision de ton manager, ou tu gère chaque NewtonBox comme un body distinct, sa reste moins optimiser
ps:
position = irr::core::vector3df();
n'est pas indispenssable, position n'a pas beusoin d'une initialiser
c'est une reference pas un pointeur
Hors ligne
Le problème de la bounding box, c'est que mon immeuble n'est pas une boite. Si je devais simplifier, c'est une boite avec un cadre sur le toit (qui représente le rebord). Si je ne voulais utiliser que des bounding box, il m'en faudrait 5 et je pensais que ça allait être couteux en calcul alors qu'un rendement par vertices me semblait plus approprier. Je vais regarder ce que tu m'as donné même si j'aimerais comprendre où se trouve mon erreur.
PS : voila le résultat avec une bounding box :
Dernière modification par Kaze (12-06-2013 23:36:05)
Hors ligne
uhm d'accort
vertexCount => tu a 48 vertex (3 vertex = 1 triangle)
strideInBytes => 1 vertex = 3 position x,y,z = 3*sizeof(float)
si je ne m'abuse ...
bref, dans ton cas il vaut mieux avoir 5 box plutot qu'un mesh, c'est pas pour rien qu'on optimise les calcules d'intersection sur les mesh avec des structure BVH
Hors ligne
Dans ce cas, je comprend alors qu'il est préférable de créer 5 box même si je ne sais absolument pas ce qu'est une structure BVH. Je vais donc faire ça et j'essaierai de vous montrer le résultat.
Hors ligne
Hors ligne
Options | Liens officiels | Caractéristiques | Statistiques | Communauté |
---|---|---|---|---|
Corrections |
|
xhtml 1.0 css 2.1 Propulsé par FluxBB Traduit par FluxBB.fr |
882 membres 1429 sujets 11119 messages |
Dernier membre inscrit: LiseBuisson96 173 invités en ligne Aucun membre connecté RSS Feed |