#1 

24-02-2009 04:29:00

Magun
Administrateurs
Avatar de Magun
Date d'inscription:
Messages: 910
IP: 78.115.100.196
Courriel  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 ....

    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
    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 !

Hors ligne


#2 

24-02-2009 18:07:59

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

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


#3 

25-02-2009 00:54:21

Magun
Administrateurs
Avatar de Magun
Date d'inscription:
Messages: 910
IP: 78.115.100.196
Courriel  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

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