Historique des modifications - Message

Message #11615

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


TypeDateAuteurContenu
Création du message09-05-2015 21:40:43jonath313
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

OptionsLiens officielsCaractéristiquesStatistiquesCommunauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1441 sujets
11339 messages
Dernier membre inscrit: Saidov17
260 invités en ligne
membre en ligne: -
RSS Feed