#1 

26-04-2015 17:32:19

jonath313
Membres
Date d'inscription:
Messages: 240
IP: 176.144.142.30
Courriel

Bonjour,

Depuis peut de temps je me suis mis à utiliser bullet, je suis entrain de faire le déplacement d'un personnage en manipulant un btPairCachingGhostObject*. Le soucis c'est que le rendu saccade, le cube ne se déplace pas à vitesse constante. Je pense que il y a un lien avec le pas de simulation, mais j'ai fais plusieurs essais et c'est sans succès (J'utilise EDT_OPENGL pour le device).

Dans mon application il y a un cube qui se déplace et le sol :

/// Create a Static Plane to walk around on
   // Segfaults- I think it's segfaulting when the objects collide in the loop
   btDefaultMotionState* bullet_MotionState = new btDefaultMotionState( btTransform(btQuaternion(0,0,0,1), btVector3(0,0,0)));
   btCollisionShape* bullet_Shape = new btStaticPlaneShape( btVector3(0,1,0), 1);         // Create Plane Shape
   btRigidBody::btRigidBodyConstructionInfo bullet_RigidBodyCI( 0, bullet_MotionState, bullet_Shape, btVector3(0,0,0) );
   btRigidBody* bullet_RigidBody = new btRigidBody( bullet_RigidBodyCI );
   World->addRigidBody( bullet_RigidBody );
   // Creating the Terrain in Irrlicht
   float scale_val = 1;
   float hm_size = 512;
   float offset = ((hm_size*scale_val)/2)*-1;
   ITerrainSceneNode *node = smgr->addTerrainSceneNode("marron.png", 0, -1, vector3df( offset, 0, offset ) , vector3df(0.f, 0.f, 0.f), vector3df(scale_val, 0.0, scale_val) );
   node->setMaterialFlag(EMF_LIGHTING, true);
   ///node->setMaterialFlag(EMF_WIREFRAME, !node->getMaterial(0).Wireframe);
   node->setMaterialTexture( 0, driver->getTexture("marron.png") );

Si c'est une question de ressource, je ne vois pas sur quoi je peux jouer pour que çà ramme moins... Si qu'elqu'un a une idée, elle sera la bienvenue. En attendant merci pour votre aide smile


Hors ligne


#2 

26-04-2015 17:44:50

Magun
Administrateurs
Avatar de Magun
Date d'inscription:
Messages: 910
IP: 92.136.124.125
Courriel  Site web

probablement lier a la façon d'appeller stepSimulation

Code c++ :


            irr::f32 DeltaTime = (time-TimeStamp)/1000.0f;

            if(DeltaTime >= fixedTimeStep)
            {
                dynamicsWorld->stepSimulation(DeltaTime, maxSubSteps, fixedTimeStep);
                TimeStamp = time;
            }


tu peut également simuler la physique dans un autre thread
neamoins si c'était une question de ressources tu aurais un fps pourris

Hors ligne


#3 

26-04-2015 20:36:03

jonath313
Membres
Date d'inscription:
Messages: 240
IP: 176.144.142.30
Courriel

Merci Magun,
visiblement tu as raison çà vient bien de çà, et j'avais écris :

btScalar walkSpeed = walkVelocity * dt;
avec :
World->stepSimulation(dt,10.0f);

Que j'ai remplacé par :
btScalar walkSpeed = walkVelocity * 0.001;
avec :
 World->stepSimulation(dt, 10);

Visiblement çà a corrigé le problème néanmoins est-ce correcte ? (La vitesse de déplacement ne dépend plus du temps de la boucle mais le pas de simulation seul en dépend )

PS : Je tourne entre 850 et 1000 fps c'est bien ?


Hors ligne


#4 

26-04-2015 22:30:36

Magun
Administrateurs
Avatar de Magun
Date d'inscription:
Messages: 910
IP: 92.136.124.125
Courriel  Site web

temps que tu est > à 60 fps oui wink

il y a plusieur façon d'établir la simulation avec bullet
soit tu utilise maxSubSteps=0 pour desactiver les interpollations de mouvement
et tu calcule toi même les différences temporelle

soit tu utilise maxSubSteps>0, et tu utilise des constantes, le reste c'est bullet qui ce charge de cela
bullet va en réaliter ce mettre a jours de façons indépendantes du fps basé sur fixedTimeStep
les mouvement entre DeltaTime et fixedTimeStep seront en réaliter interpoller
et tu n'auras donc aucun soucis temporelle

http://www.bulletphysics.org/mediawiki-1.5.8/index.php/Stepping_The_World

tu passe bien par un KinematicCharactereControler ?

Hors ligne


#5 

27-04-2015 20:02:03

jonath313
Membres
Date d'inscription:
Messages: 240
IP: 176.144.142.30
Courriel

oui je passe par un KinematicCharactereControler , par contre j'ai juste ajouté un cube btRigidBody *TObject et mon rendu est tombé à 60 fps et çà ramme énormément.

La solution que tu m'as montré comporte pleins de variables ...
DeltaTime : dt ok
TimeStamp : temps de boucle ok
time : le temps courant ok

Mais je fais quoi avec fixedTimeStep, maxSubSteps ?

Merci.


Hors ligne


#6 

27-04-2015 21:05:26

Magun
Administrateurs
Avatar de Magun
Date d'inscription:
Messages: 910
IP: 92.136.124.125
Courriel  Site web

pour ton soucis de fps, peut-être faudrait-il un bouts de code pour que je regarde de plus près
ensuite pour les variables, j'ai l'impression que tu ne fait pas beaucoup de recherche ...
d'ailleurs tout est dans le liens que j'ai mis (tu comprendre l'anglais je suppose ?).

je t'est expliquer le role de maxSubSteps et fixedTimeStep dans mon précédants post
enfin n'ai je peut être pas été asser explicite fixedTimeStep c'est le "fps" de ta physique (
et maxSubSteps c'est le nombre d'interpollation maximal pour completer les trous avec le fps réelle
mes pour les calibrages c'est à toi de jouer, je ne peut connaitre t'est beusoin

donc que veut tu savoir de plus sur ces deux variables ?

faut savoir que je passe beaucoup de temps sur certains post
le temps de re-rechercher, de vérifier ce que je dit, de faire des traductions avec des terme pas toujours existant en français ... etc
le dernier gros post d'une page pour t'expliquer l'animation physique d'un ragdoll m'a prit +2h

Hors ligne


#7 

27-04-2015 21:27:15

jonath313
Membres
Date d'inscription:
Messages: 240
IP: 176.144.142.30
Courriel

Si si je cherche beaucoup mais çà fais qu'une semaine que je me suis plongé dans bullet alors c'est un peut la jungle. Je fais du graphisme à la base moi et je bosse dans l'électronique alors la programmation physique c'est complétement nouveau pour moi. En tout cas je suis désolé d'abuser de tas sympathie mais tu m'as beaucoup aidé jusqu'ici et c'est pour cela que je n'ai pas laissé tombé...

En tout cas merci et désolé d'assaillir le forum de questions.


Hors ligne


#8 

27-04-2015 21:39:40

Magun
Administrateurs
Avatar de Magun
Date d'inscription:
Messages: 910
IP: 92.136.124.125
Courriel  Site web

non pas de soucis le forum est la pour ça !! smile
si tu a des soucis technique, des questions, des explications pas de soucis

c'est juste sur ces 2 topic j'ai tout de même eu l'impression d'avoir du mal a te faire comprend certaine chose
mon point de vue, reste que je ne suis pas sencé te donner les solutions pré-maché surtout si tu commence
et t'amener a la compréhension de ton code

après tu m'excuseras je programme depuis +10ans je peut avoir du mal a cerner t'est difficulter
ça reste un exercice intéressant pour moi

Hors ligne


#9 

28-04-2015 11:21:32

jonath313
Membres
Date d'inscription:
Messages: 240
IP: 217.128.73.71
Courriel

Bin mes difficultés c'est juste la compréhension du raisonnement sur moteur physique. Par exemple, quand je prend ce code :

   /// Setup Character Controlable Capsule Shape
   btTransform startTransform;
   startTransform.setIdentity ();
   startTransform.setOrigin (btVector3(0.0, 50.0, 0.0)); // Create it 150 units in the air, so we have some time before contact with the plane

   GhostObject = new btPairCachingGhostObject();
   GhostObject->setWorldTransform(startTransform);
   sweepBP->getOverlappingPairCache()->setInternalGhostPairCallback(new btGhostPairCallback());
   btScalar characterHeight=1.75;
   btScalar characterWidth =1.75;
   capsule = new btCapsuleShape(characterWidth,characterHeight);

///MASSE NE FONCTIONNE PAS
//btScalar   mass(0.0f);
//btVector3 localInertia(0,0,0);
//capsule->calculateLocalInertia(mass,localInertia);


   GhostObject->setCollisionShape (capsule);
   GhostObject->setCollisionFlags (btCollisionObject::CF_CHARACTER_OBJECT); //btCollisionObject::CF_NO_CONTACT_RESPONSE
   World->addCollisionObject(GhostObject,btBroadphaseProxy::CharacterFilter, btBroadphaseProxy::StaticFilter|btBroadphaseProxy::DefaultFilter);

   btScalar stepHeight = btScalar(0.35);
   Character = new btKinematicCharacterController (GhostObject,capsule,stepHeight);
   World->addAction(Character);

   // Create a Cube to follow the Ghost/Character Capsule and a few lights and a camera so we can see the world
   player_model_node = smgr->addCubeSceneNode(2);
   smgr->addLightSceneNode(0, vector3df(6,8,-5), SColorf(0.58f,0.73f,0.89f,1.0f), 19.0f);
   smgr->addLightSceneNode(0, vector3df(-6,1,5), SColorf(0.58f,0.73f,0.89f,1.0f), 19.0f);

Il y a du monde quand même, mais tu vois là où j'ai étais ennuyé c'est que je me suis dis : mon but c'est de faire déplacer tout çà au niveau position, sur qui agir ? ... J'ai finis par trouver, mais maintenant je me rend compte que la configuration de la masse de la capsule ne fonctionne pas. Avec un rigidbody çà marche mais là j'ai surement du oublier quelque chose et j'ais aucune idée de ce que çà peut être. La capsule tombe sur le sol çà ok, mais je ne vois pas du tout à quelle moment je l'ais demandé. La difficulté pour chercher quelque chose c'est de savoir comment çà s'appel ...


Hors ligne


#10 

29-04-2015 07:48:34

Magun
Administrateurs
Avatar de Magun
Date d'inscription:
Messages: 910
IP: 92.136.124.125
Courriel  Site web

comment déduit tu que la masse est sens effet ?

a qu'elle moment ? mais enfin quand tu rajoute un node avec irrlicht il apparait non ? ba c'est pareille
a partir du moment ou tu ajoute un objet a la simulation et que tu appelle stepSimulation ton objet bouge
a par évidement si tu dit explicitement qu'il est statique ou qu'il y a des contraintes

btKinemacticControler:
"It uses a ghost object and convex sweep test to test for upcoming collisions."
"Interaction between btKinematicCharacterController and dynamic rigid bodies needs to be explicitly implemented by the user."
d'où l'utilisation de btGhostPairCachingObject

Hors ligne


#11 

09-05-2015 00:19:05

jonath313
Membres
Date d'inscription:
Messages: 240
IP: 176.144.142.30
Courriel

ok merci Magun !


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