#0 

24-02-2009 05:29:00

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

hello tout le monde ! tongue

voila je code un petit trimesh pour bullet ( aider avec qu'elle que source sur le net, tell que irrlamb et un exemple de softbody en japonnais oO )
bon sauf que mais mesh se traverse donc évidement je suspecte mon trimesh ....

MAIS ! big_smile
si je crée un rigidBody avec un box pour la collision (statique), les objets utilisant le trimesh rentre tout de même en colision avec lui ...

alors bon déjà je voudrait savoir si mon trimesh est correcte ....

Code:

    void IEntity::meshToPhysic(irr::scene::IMesh *TMesh, btTriangleMesh *TCollisionMesh, const irr::core::vector3df &TScale)
    {
        for(irr::u32 u = 0; u < TMesh->getMeshBufferCount(); u++)
            meshBufferToPhysic(TMesh->getMeshBuffer(u),TCollisionMesh,TScale);
    }
    void IEntity::meshBufferToPhysic(irr::scene::IMeshBuffer *TMeshBuffer, btTriangleMesh *TCollisionMesh, const irr::core::vector3df &TScale)
    {
        btVector3 TriangleVertices[3];
        u16 *Indices = TMeshBuffer->getIndices();
        if(TMeshBuffer->getVertexType() == EVT_STANDARD)
        {
            S3DVertex *Vertices = (S3DVertex *)TMeshBuffer->getVertices();
            for(u32 i = 0; i < TMeshBuffer->getIndexCount(); i += 3)
            {
                TriangleVertices[0] = btVector3(Vertices[Indices[i]].Pos.X * TScale.X,Vertices[Indices[i]].Pos.Y * TScale.Y,Vertices[Indices[i]].Pos.Z * TScale.Z);
                TriangleVertices[1] = btVector3(Vertices[Indices[i+1]].Pos.X * TScale.X,Vertices[Indices[i+1]].Pos.Y * TScale.Y,Vertices[Indices[i+1]].Pos.Z * TScale.Z);
                TriangleVertices[2] = btVector3(Vertices[Indices[i+2]].Pos.X * TScale.X,Vertices[Indices[i+2]].Pos.Y * TScale.Y,Vertices[Indices[i+2]].Pos.Z * TScale.Z);
                TCollisionMesh->addTriangle(TriangleVertices[0], TriangleVertices[1], TriangleVertices[2]);
            }
        }
        else
        {
            S3DVertex2TCoords *Vertices = (S3DVertex2TCoords *)TMeshBuffer->getVertices();
            for(u32 i = 0; i < TMeshBuffer->getIndexCount(); i += 3)
            {
                TriangleVertices[0] = btVector3(Vertices[Indices[i]].Pos.X * TScale.X,Vertices[Indices[i]].Pos.Y * TScale.Y,Vertices[Indices[i]].Pos.Z * TScale.Z);
                TriangleVertices[1] = btVector3(Vertices[Indices[i+1]].Pos.X * TScale.X,Vertices[Indices[i+1]].Pos.Y * TScale.Y,Vertices[Indices[i+1]].Pos.Z * TScale.Z);
                TriangleVertices[2] = btVector3(Vertices[Indices[i+2]].Pos.X * TScale.X,Vertices[Indices[i+2]].Pos.Y * TScale.Y,Vertices[Indices[i+2]].Pos.Z * TScale.Z);
                TCollisionMesh->addTriangle(TriangleVertices[0], TriangleVertices[1], TriangleVertices[2]);
            }
        }
    }

également ma conversion, je trouve que mes mesh tourne bizarrement o_o

Code:

    void IEntity::QuaternionToEuler(const btQuaternion &TQuat, btVector3 &TEuler)
    {
        btScalar w = TQuat.getW();
        btScalar x = TQuat.getX();
        btScalar y = TQuat.getY();
        btScalar z = TQuat.getZ();
        float euler[3];
        euler[2] = (irr::f32) (atan2(2.0 * (x*y + z*w),( (x*x)-(y*y)-(z*z)+(w*w))));
        euler[0] = (irr::f32) (atan2(2.0 * (y*z + x*w),(-(x*x)-(y*y)+(z*z)+(w*w))));
        euler[1] = (irr::f32) (asin(-2.0 * (x*z - y*w)));
        TEuler = btVector3((((-euler[0])*180.0)/PI),(((-euler[1])*180.0)/PI),(((euler[2])*180.0)/PI));
    }

et dernier truc j'intègre la physique dans mon entity manager, je sais pas si ses l'idéal ?....
et après je penses intégré les sockets pour rafraîchir la position des autres joueurs, comme ça il ne resteras plus qu'à géré les événement du "joueur joué"
uhm ... et comme d'habitude si vous voulez toutes les sources il n'y a pas de problème !

voila voila ... smile
merci d'avance !

Dernière modification par Magun (24-02-2009 05:30:55)

Hors ligne


#1 

24-02-2009 19:07:59

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

Bon, pour ce qui est du soucis de collision, n'y a-t-il pas un soucis d'orientation des faces.
Je sais que lors de la constitution des trimesh, avec certains moteur physique, si la normal des
faces est orientée vers l'intérieur, alors cela bug au niveau des collision.
Il faut donc parfois savamment jouer sur l'ordre de construction des points pour constituer les triangles.

Je sais qu'il existe un wrap de Bullet pour Irrlicht, tu n'a pas jeté un oeil des fois pour voir quel
forme ont les routines de constitution des trimesh ?

et dernier truc j'intègre la physique dans mon entity manager, je sais pas si ses l'idéal ?....


Tout dépend comment c'est fait, perso, comme beaucoup de codeurs, j'aime bien séparer et cloisonner mon code, et
donc ne pas lier (par exemple) le moteur physique au moteur graphique , de près ou de loin. Maintenant, je suppose
que c'est une question de point de vue.


Force et sagesse...

Hors ligne


#2 

25-02-2009 01:54:21

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

j'ai regarder, le warper pour irrlicht, mais pas très claire ....
donc soit mon trimesh mais les face a l'intérieur ( bien que apparemment se n'est pas se qui gène bullet ), car il exist bien des triangle pour le mesh de ma physique ...

mais apparemment j'initialise mal, mon mesh dans la physique car si je passe par des boxs, il n'y a pas de collision également sad
en tout cas merci pour ta réponse cela ma conduit au hypothèse si dessus, et j'ai l'impression de me rapproché du problème tongue

voila donc je vais travaillé avec des boxs j'usque se que les collisions remarche après je repasse a mon trimesh ... puis si sa marche pas je poste wink

/* GRRR ... saleté de rhume !!!! */

// modif :
en fait il semblerais que bullet est désactiver les collisions trimesh vs trimesh, et que donc mon trimesh marche ( tester )
reste a trouver comment le réactivé si ses possible ....
au pire je devrait passé tout mais rigid body en soft body ou il n'y a pas cette contrainte tongue

Dernière modification par Magun (25-02-2009 03:58:02)

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