IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PhysX et APEX Discussion :

Champ de forces et Ogre 3D


Sujet :

PhysX et APEX

  1. #1
    lpa
    lpa est déconnecté
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2004
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 39
    Points : 54
    Points
    54
    Par défaut Champ de forces et Ogre 3D
    Bonjour,
    J'ai quelques souci pour intégrer la physique sur un terrain de ogre et je me permet donc de solliciter votre aide.
    J'utilise ogre 1.8.1 et physx 3.2
    Voici le code que j'utilise:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    mTerrainGroup->loadAllTerrains(true);
     
     
          // ### ADD Physics to terrain ###
          Ogre::TerrainGroup::TerrainIterator ti = mTerrainGroup->getTerrainIterator();
            while(ti.hasMoreElements()) {
                Ogre::Terrain* terrain = ti.getNext()->instance;
                Ogre::uint16 numCols, numRows;
             numRows = numCols = terrain->getSize();
     
             float *terrainHeights = terrain->getHeightData();
     
             physx::PxHeightFieldSample* samples = (physx::PxHeightFieldSample*) new physx::PxHeightFieldSample[numRows*numCols];//physx::PxHeightFieldSample* samples = (physx::PxHeightFieldSample*)malloc(sizeof(physx::PxHeightFieldSample)*(numRows*numCols));
             const physx::PxReal heightScale = (terrain->getMaxHeight() / 65536.0f / 2.f);;
     
             for (Ogre::uint16  row = 0; row < numRows; row++) {
                for (Ogre::uint16 column = 0; column < numCols;  column++) {
                   samples[row + (column * numRows)].height = (physx::PxI16) (terrainHeights[row + (column * numRows)] / heightScale);
                   samples[row + (column * numRows)].materialIndex0=0;
                   samples[row + (column * numRows)].materialIndex1=0;
                 }
             }
     
             physx::PxHeightFieldDesc heightFieldDesc;
             heightFieldDesc.format             = physx::PxHeightFieldFormat::eS16_TM;
             heightFieldDesc.nbColumns          = numCols;
             heightFieldDesc.nbRows             = numRows;
             heightFieldDesc.samples.data       = samples;
             heightFieldDesc.samples.stride     = sizeof(physx::PxHeightFieldSample);
     
             physx::PxPhysics *physics = Api::getSingletonPtr()->getPhysics();
     
             physx::PxHeightField* heightField = physics->createHeightField(heightFieldDesc);
     
             physx::PxTransform pose = physx::PxTransform::createIdentity();
             Ogre::Vector3 centerPosition = terrain->getPosition ();
             centerPosition.y = 0;
     
             pose.p = physx::PxVec3(centerPosition.x,centerPosition.y,centerPosition.z);
     
             physx::PxRigidStatic* hfActor = physics->createRigidStatic(pose);
     
             physx::PxHeightFieldGeometry hfGeom(heightField, physx::PxMeshGeometryFlags(), heightScale, 1, 1);
     
             physx::PxMaterial* material = physics->createMaterial(0.5f, 0.5f, 0.1f);    //static friction, dynamic friction, restitution
             physx::PxShape* shape = hfActor->createShape(hfGeom,*material);
     
             physx::PxFilterData collFilterData;
             collFilterData.word0=1;
             collFilterData.word1=1;
             shape->setSimulationFilterData(collFilterData);
     
             mPhysXScene->addActor(*hfActor);
            }
          // ### /ADD Physics to terrain ###
     
          mTerrainGroup->freeTemporaryResources();
    le terrain s'affiche bien dans pvd mais n'a pas la bonne forme j'ai essayé pas mal de méthode pour les calcules de hauteur mais je n'es rien trouvé qui marche correctement.

    voici les rendus:
    ogre:


    physx:


    Est ce que quelqu'un pourrait m'indiquer comment faire correctement le calcul ou aurait un exemple avec physx 3.2
    merci
    Images attachées Images attachées   

Discussions similaires

  1. Champ mot de passe forcé à 8 carctères
    Par DjChat dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 12/06/2008, 15h24
  2. Accès forcé à un champ d'un formulaire
    Par pat04 dans le forum Access
    Réponses: 1
    Dernier message: 23/08/2006, 09h42
  3. force le format d 'un champ
    Par discogarden dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 31/08/2005, 11h19
  4. Taille des champs proportionnelle...
    Par Depteam1 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 09/08/2002, 11h48
  5. taille max du nom d'un champ
    Par hna dans le forum Paradox
    Réponses: 2
    Dernier message: 28/07/2002, 02h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo