#0 

14-11-2009 20:44:03

nico
Webmaster
Date d'inscription: 07-08-2009
Messages: 563
Corrections: 9

Salut, je suis en train de tester newton 2.10, et je souhaiterai établir une collision entre 2 cubes, pour les tests, j'ai placé le cube1 au dessus du cube2.
Quand je lance le programme, les 2 cubes tombent et collisionnent avec le sol, par contre le cube1 passe à travers le cube2, donc il n'y a pas de collisions entre les cubes.
Pouvez-vous me dire si j'ai oublié une étape ? merci.
voici un extrait du code

Code c++ :


world = NewtonCreate(0,0);
float min[] = {0, 0, 0};
float max[] = {100000, 100000, 100000};
NewtonSetWorldSize (world, min, max);

    colision=  NewtonCreateBox(world,1000,1000,1000,0,0);
    body1 = NewtonCreateBody(world,colision) ;
    NewtonBodySetCollision(body1, colision);
    NewtonReleaseCollision (world, colision);
    NewtonBodySetUserData(body1, cubenode1);
    NewtonBodySetMassMatrix(body1,10,2,2,2);
    matrix4 mat1 ;
    mat1.setTranslation(position);
    NewtonBodySetMatrix(body1,mat1.pointer());
    NewtonBodySetTransformCallback(body1, SetMeshTransformEvent);
    NewtonBodySetForceAndTorqueCallback(body1, ApplyForceAndTorqueEvent);

    colision2=  NewtonCreateBox(world,1000,1000,1000,0,0);
    body2 = NewtonCreateBody(world,colision2) ;
    NewtonBodySetCollision(body2, colision2);
    NewtonReleaseCollision (world, colision2);
    NewtonBodySetUserData(body2, cubenode2);
    NewtonBodySetMassMatrix(body2,10,2,2,2);
    matrix4 mat2 ;
    mat2.setTranslation(vector3df(2700*2-2000,5,2600*2+1000));
    NewtonBodySetMatrix(body2,mat2.pointer());
    NewtonBodySetTransformCallback(body2, SetMeshTransformEvent);
    NewtonBodySetForceAndTorqueCallback(body2, ApplyForceAndTorqueEvent);

while.......

NewtonUpdate ( world, 1 / 60 ) ;

................



Merci pour votre aide.

Hors ligne


#1 

15-11-2009 11:19:36

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

A priori c'est pourtant pas trop mal. Je sais qu'a une époque, j'avais eu des soucis avec des objets définit trop grand.
Par exemple, tu définis des cube d'une taille 1000. As-tu testé avec un environement 'plus modeste', tout simplement
des élément de 1 dans un world définit de 100 par exemple...

PS: les NewtonBodySetCollision(body, colision); ne sont pas nescessaires.


Force et sagesse...

Hors ligne


#2 

15-11-2009 14:38:59

nico
Webmaster
Date d'inscription: 07-08-2009
Messages: 563
Corrections: 9

Merci tmyke, j'ai testé avec les dimensions standarts en 100x100 et malheureusement le problème persiste. j'ai eu effectivement des problèmes de dimensions avant de découvrir newtonsetworldsize().
Aussinon je me contente de reproduire les tuto(en 1.5 le plus souvent) donc je ne comprend pas ou le bat blesse.

effectivement NewtonBodySetCollision(body, colision); n'a pas d'influence quand je l'enlève, mais alors comment newton sait que je veux faire des collisions si je ne lui dit-pas ? est-ce que NewtonBodySetUserData() rempli ce rôle ? j'ai du mal à comprendre wink

Merci pour ton aide.

Hors ligne


#3 

15-11-2009 17:10:20

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

nico :

effectivement NewtonBodySetCollision(body, colision); n'a pas d'influence quand je l'enlève, mais alors comment newton sait que je veux faire des collisions si je ne lui dit-pas ? est-ce que NewtonBodySetUserData() rempli ce rôle ? j'ai du mal à comprendre wink


En fait, quand tu définis ton body, tu passe tes info de collision à travers l'instruction NewtonCreateBody (World,  collision);

Si tu veux avoir quelques info, même si mon code n'est pas super organisé, va voir le code source de N3xtD, en particulier le fichier n3xtd_PhysRigidBody.cpp
et pourquoi pas aussi n3xtd_PhysNewton.cpp
C'est totalement libre, et il y a des fonction  qui devraient te servir, soient telles-quelles, soit pour comprendre certaines parties de la mise en oeuvre de Newton ( c'est
avec la version 2.XX).


Sinon, quel est le code des fonctions ApplyForceAndTorqueEvent et SetMeshTransformEvent ?


Force et sagesse...

Hors ligne


#4 

15-11-2009 17:29:50

nico
Webmaster
Date d'inscription: 07-08-2009
Messages: 563
Corrections: 9

A oui c'est vrai, j'avais pas pensé qui y avait newton dans N3XTD, je vais voir ça dessuite wink

Aussinon pour les fonctions de callback, c'est celles des tuto que j'ai essayé de mettre à jour pour que ce soit compatible avec la version 2.10.

Code c++ :

void _cdecl Objet::SetMeshTransformEvent(const NewtonBody* body, const float* matrix,int)
{
    // copy the matrix into an irrlicht matrix4
    matrix4 mat;
    memcpy(mat.pointer(), matrix, sizeof(float)*16);

    // Retreive the user data attached to the newton body
    ISceneNode *tmp = (ISceneNode *)NewtonBodyGetUserData(body);
    if (tmp)
    {
        // Position the node
        tmp->setPosition(mat.getTranslation());        // set position
        tmp->setRotation(mat.getRotationDegrees());    // and rotation
    }
}

void _cdecl Objet::ApplyForceAndTorqueEvent (const NewtonBody* body,float timestep, int threadindex)
{
   float mass;
   float Ixx;
   float Iyy;
   float Izz;
   float force[3];
   float torque[3];

   NewtonBodyGetMassMatrix (body, &mass, &Ixx, &Iyy, &Izz);

   force[0] = 0.0f;
   force[1] = NEWTON_GRAVITY * mass;
   force[2] = 0.0f;

   torque[0] = 0.0f;
   torque[1] = 0.0f;
   torque[2] = 0.0f;

   NewtonBodyAddForce (body, force);
   NewtonBodyAddTorque (body, torque);
}

Hors ligne


#5 

19-11-2009 14:31:10

nico
Webmaster
Date d'inscription: 07-08-2009
Messages: 563
Corrections: 9

Salut tmyke, malheureusement, je n'arrive toujours pas a faire de collisons avec 2 cubes mobiles, par contre si je met la mass du cube du dessous à 0, alors il y a collision  yikes
Donc je n'y comprend plus rien sad

Hors ligne


#6 

16-01-2010 12:50:58

nico
Webmaster
Date d'inscription: 07-08-2009
Messages: 563
Corrections: 9

depuis je suis passé sur bullet, mais je me rend compte que l'erreur venait du fait que je n'avais pas déclaré de sol wink

Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
883 membres
1429 sujets
11121 messages
Dernier membre inscrit: Saidov17
85 invités en ligne
Aucun membre connecté
RSS Feed