dgCollisionCompound::SupportVertex error

A place to discuss everything related to Newton Dynamics.

Moderators: Sascha Willems, walaber

dgCollisionCompound::SupportVertex error

Postby pHySiQuE » Mon Jul 09, 2012 3:36 pm

This code is in dgCollisionCompound:
Code: Select all
dgVector dgCollisionCompound::SupportVertex (const dgVector& dir) const
{
   _ASSERTE (0);
   return dgVector (0,0,0,0);
/*

Are compound collisions never meant to be scaled, or is this just a work in progress?
pHySiQuE
 
Posts: 608
Joined: Fri Sep 02, 2011 9:54 pm

Re: dgCollisionCompound::SupportVertex error

Postby Julio Jerez » Tue Jul 10, 2012 7:55 am

compoudn general scale not, you scale the children.


but that function should be workd completer
Julio Jerez
Moderator
Moderator
 
Posts: 12426
Joined: Sun Sep 14, 2003 2:18 pm
Location: Los Angeles

Re: dgCollisionCompound::SupportVertex error

Postby pHySiQuE » Tue Jul 10, 2012 11:32 pm

Ah, I just scale the collisions before adding them to the compound collision, and then I recreate the compound collision any time the scale changes. It works great!
pHySiQuE
 
Posts: 608
Joined: Fri Sep 02, 2011 9:54 pm

Re: dgCollisionCompound::SupportVertex error

Postby Julio Jerez » Wed Jul 11, 2012 8:40 am

you do not have to recreate the compound collision you can simple iterate ove teh shapes and apply the scale, it will be cheaper
Julio Jerez
Moderator
Moderator
 
Posts: 12426
Joined: Sun Sep 14, 2003 2:18 pm
Location: Los Angeles

Re: dgCollisionCompound::SupportVertex error

Postby pHySiQuE » Wed Jul 11, 2012 11:09 am

How do I get the compound shape's sub collision shapes?:
Code: Select all
void NewtonScaleCompoundCollision(NewtonCollision* const compoundCollision, const float& x, const float& y, const float& z)
{
   NewtonCollision* subcollision;
   void* node;
   
   node = NewtonCompoundCollisionGetFirstNode(compoundCollision);
   while (node!=NULL)
   {
      //-----------------------------------------------------------------------------------------
      subcollision = ???;/// what goes here?????????????????????????????????????
      //-----------------------------------------------------------------------------------------
      NewtonCollisionSetScale(subcollision, x, y, z);
      node = NewtonCompoundCollisionGetNextNode(compoundCollision, node);
   }
}
pHySiQuE
 
Posts: 608
Joined: Fri Sep 02, 2011 9:54 pm

Re: dgCollisionCompound::SupportVertex error

Postby Julio Jerez » Wed Jul 11, 2012 11:26 am

Code: Select all
   // show hwo to modify the chidren of a compound collision
   NewtonCompoundCollisionBeginAddRemove(compound);   
   for (void* node = NewtonCompoundCollisionGetFirstNode(compound); node; node = NewtonCompoundCollisionGetNextNode(compound, node)) {
      NewtonCollision* const collision = NewtonCompoundCollisionGetCollisionFromNode(compound, node);
      // you can scale, change the matrix, change the inertia, do anything you want with the change
      NewtonCollisionSetUserData(collision, NULL);
   }
   NewtonCompoundCollisionEndAddRemove(compound);   
Julio Jerez
Moderator
Moderator
 
Posts: 12426
Joined: Sun Sep 14, 2003 2:18 pm
Location: Los Angeles

Re: dgCollisionCompound::SupportVertex error

Postby pHySiQuE » Wed Jul 11, 2012 1:33 pm

Cool, here's my final working code to rescale any body, in case anyone else needs it:
Code: Select all
NewtonCollision* collision = NewtonBodyGetCollision(newtonBody);
NewtonCollisionInfoRecord collisionInfo;
 NewtonCollisionGetInfo(collision, &collisionInfo);
if (collisionInfo.m_collisionType==SERIALIZE_ID_COMPOUND || collisionInfo.m_collisionType==SERIALIZE_ID_COMPOUND_BREAKABLE)
{
      NewtonCompoundCollisionSetScale(collision,scale.x,scale.y,scale.z);
}
else
{
      NewtonCollisionSetScale(collision,scale.x,scale.y,scale.z);
}


Code: Select all
    void NewtonDynamicsBody::NewtonCompoundCollisionSetScale(NewtonCollision* const compoundCollision, const float& x, const float& y, const float& z)
    {
        NewtonCollision* subcollision;
        void* node;
       
        NewtonCompoundCollisionBeginAddRemove(compoundCollision);
        node = NewtonCompoundCollisionGetFirstNode(compoundCollision);
        while (node!=NULL)
        {
            subcollision = NewtonCompoundCollisionGetCollisionFromNode(compoundCollision, node);
            NewtonCollisionSetScale(subcollision, x, y, z);
            node = NewtonCompoundCollisionGetNextNode(compoundCollision, node);
        }
        NewtonCompoundCollisionEndAddRemove(compoundCollision);
    }
pHySiQuE
 
Posts: 608
Joined: Fri Sep 02, 2011 9:54 pm


Return to General Discussion

Who is online

Users browsing this forum: No registered users and 1 guest