Historique des modifications - Message

Message #6068

Sujet: trimesh ?


Type Date Auteur Contenu
Dernière modification 24-02-2009 04:30:55 Magun
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 !
Création du message 24-02-2009 04:29:00 Magun
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 !

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