Historique des modifications - Message

Message #11615

Sujet: Face de collision du mauvais coté de la heightmap [bullet + irrlicht]


Type Date Auteur Contenu
Création du message 09-05-2015 21:40:43 jonath313
oui je passe à travers, et si je fais une rotation de 180 degrès du terrain je ne passe plus à travers mais les forcément les normales ne correspondent plas à la map. Après je peut faire ma heightmap en inversée aussi mais çà me paraît hyper tordu comme idée lol.

Tas solution est la bonne, je viens de vérifier sur le net et je ne suis pas le seul dans ce cas, les normales sont inversées. J'ai trouvé un code qui devrait aussi jouer le même rôle que le tien mais je n'ai pas envie de copier/coller car de toutes façon je ne sais pas comment l'utiliser. Voici le code :

static bool myCustomMaterialCombinerCallback(
    btManifoldPoint& cp,
    const btCollisionObjectWrapper* colObj0Wrap,
    int partId0,
    int index0,
    const btCollisionObjectWrapper* colObj1Wrap,
    int partId1,
    int index1
    )
{
    // one-sided triangles
   if (colObj1Wrap->getCollisionShape()->getShapeType() == TRIANGLE_SHAPE_PROXYTYPE)
    {
        auto triShape = static_cast<const btTriangleShape*>( colObj1Wrap->getCollisionShape() );
        const btVector3* v = triShape->m_vertices1;
        btVector3 faceNormalLs = btCross(v[1] - v[0], v[2] - v[0]);
        faceNormalLs.normalize();
        btVector3 faceNormalWs = colObj1Wrap->getWorldTransform().getBasis() * faceNormalLs;
        float nDotF = btDot( faceNormalWs, cp.m_normalWorldOnB );
        if ( nDotF <= 0.0f )
        {
            // flip the contact normal to be aligned with the face normal
            cp.m_normalWorldOnB += -2.0f * nDotF * faceNormalWs;
        }
    }

    //this return value is currently ignored, but to be on the safe side: return false if you don't calculate friction
    return false;
}

void BulletPhysics::init()
{
    // somewhere in your init code you need to setup the callback
    gContactAddedCallback = myCustomMaterialCombinerCallback;
}

Et le poste concerné :

http://bulletphysics.org/Bullet/phpBB3/viewtopic.php?t=10224/

çà me géne de te demander çà, car tu ma déja bien aidé jusqu'ici, mais où je dois modifier mon code pour fliper les normal ?

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