Re: Ragdolls and game character accurate collision/raycasting

paradoxers

15-02-2009 10:25:46

http://www.ogre3d.org/addonforums/viewtopic.php?f=6&t=5289

hm... Has anybody that example like a ready application? Because it's rather difficult to me to understand a code in a forum. If somebody have, can you host it in some server? Please... :)



SPLIT BY BETAJAEN. Please don't bring up 2 year old posts again

Caphalor

15-02-2009 15:17:23

My current ragdoll class is based on parts of ebols code, but there are also differences: My class auto-generates a ragdoll according to the bone skeleton and exports a text file where you can tweak joint limits and actor sizes etc. The ragdoll generation is based on an approach described in an article in the PhysX help file using D6 joints. Here is a screenshot:


I didn't post the code because there are still a lot of problems and the class is integrated in my component based object system. If I find the time and if I manage to fix the biggest problems I will try to build a demo, but I can't pledge it.

betajaen

15-02-2009 15:38:30

I didn't post the code because there are still a lot of problems and the class is integrated in my component based object system. If I find the time and if I manage to fix the biggest problems I will try to build a demo, but I can't pledge it.

All of us here would appreciate that - if you had the time of course.

Caphalor

16-02-2009 11:11:06




My 'ragdolled cake' will be available soon, but I really have to go to school now. :D
I also have to test it with other meshes.

betajaen

16-02-2009 12:25:00

Brilliant!

A few months ago; I came up with the name "Jellydoll"; Softbody ragdolls that wouldn't require bones. With the new Renderable class in Blood Mess emerging I may have a stab at it.

paradoxers

22-02-2009 15:42:14

This is excellent!!Good work, Caphalor! :D

nargil

23-02-2009 08:24:55

luv ya ;)

Caphalor

23-02-2009 09:04:42

Hmmm.... I have a problem when I try to generate the bone skeleton for the robot or the ninja.

while(boneI.hasMoreElements())
{
bone->getOrientation(); //Returns always Ogre::Quaternion(1,0,0,0)
bone->_getDerivedOrientation(); //Returns always Ogre::Quaternion(1,0,0,0)
bone->getInitialOrientation(); //Returns always Ogre::Quaternion(1,0,0,0)


This is not the case when I use the jaiqua mesh. Do you have some ideas or advices for me?

Caphalor

03-03-2009 17:07:13

Download
I wasn't able to solve the mentioned problem, but nevertheless, here is my ragdolled cake. F10 inserts a jaiqua ragdoll, f9 a jaiqua where the bone actors are synchronized with the bones.
Usage:

if (arg.key == OIS::KC_F10) {
Ragdoll *ragdoll = new Ragdoll(mSceneMgr, mKnownScene, "test" + Ogre::StringConverter::toString(mRagdolls.size()), "jaiqua.mesh", Ogre::Vector3(0.3,0.3,0.3));
ragdoll->SetControlToActors();
mRagdolls.push_back(ragdoll);
return true;
}
if (arg.key == OIS::KC_F9) {
Ragdoll *ragdoll = new Ragdoll(mSceneMgr, mKnownScene, "test" + Ogre::StringConverter::toString(mRagdolls.size()), "jaiqua.mesh", Ogre::Vector3(0.3,0.3,0.3));
ragdoll->SetAnimationState("Walk");
mRagdolls.push_back(ragdoll);
return true;
}


If you want to use an own mesh, you have to do the following:
1. Create a ragdoll instance ( "Ragdoll *ragdoll = new Ragdoll(mSceneMgr, mScene, "test", "mymodel.mesh");" ) Use the PhysX Remote debugger to check the auto-generated actor bone skeleton. After that, open the "mymodel.mesh.bones" which should be exported by my ragdoll class. There, you can tweak joint limits and the skeleton structure (for example, in case of the jaiqua it was nescessarry to remove the bone actors "Jaiqua" and "GlobalSRT"). Note that the .bones file has to be somewhere where the ogre resource system can find it.
All in all the system is a bit buggy and I am not really happy with it yet. If you want to implement your own ragdoll class, feel free to use my code. I also recommend the ragdoll article in the PhysX help file (search for "Rag Doll", not "ragdoll"!).

nargil

04-03-2009 11:11:25

It's great. Just the legs are shaking a bit, but anyway great work. Thanks for sharing.

betajaen

04-03-2009 12:11:02

Thanks again.

May I have your permission to use it as a base for Ragdolls in BloodyMess (obviously modified to make it abstract enough so it can use any RenderSystem)?

nargil

04-03-2009 13:00:42

I suggest modify

void Ragdoll::SetAnimationState(Ogre::String statename)
{
mAnimationState = mEntity->getAnimationState(statename);
mAnimationState->setLoop(true);
mAnimationState->setEnabled(true);
}


to

void Ragdoll::SetAnimationState(Ogre::String statename, Ogre::Real weight)
{
mAnimationState = mEntity->getAnimationState(statename);
mAnimationState->setLoop(true);
mAnimationState->setEnabled(true);
mAnimationState->setWeight(weight);
}


Because once you set controll to the actors all weights are set to 0, and the mesh is not animated after returning controll back to bones.

Also how why are the bones being .reset() in the SetControlToActors() function ? I like it more without (no flickering)

Are you going to implement a method to move the raggdolls around or attach it to a (Kinematic)CharacterController ?

Caphalor

04-03-2009 14:35:47

Thank you for the feedback! As I already said, feel free to use the code or parts of the code. I won't improve or extend the ragdoll class in the near future because the debugging and tuning of the ragdoll really sucks (you already mentioned the legs, but there are also other mysterious bugs, just try to ragdoll the ninja mesh...). :x In addition to that, it is not really essential for my project, more "nice to have" (but I always wanted enemies flying around due to massive explosions ;)).

nargil

08-03-2009 21:04:43

Has anyone modified anything in the ragdoll code ? If there are any fixes made by you, I'd appreciate you posting them. I'm going to implement this in my application tomorrow ;)

nargil

12-03-2009 21:37:58

Video showing some progress on integrating it with nxCharacter (and NxOgre of course ;*)
http://www.youtube.com/watch?v=xAllLFYJ3qI

Look quite good even though I didn't touch the ragdoll creation, and it still doesnt work very well with the robot. Soon I will have an own animated character to experiment with.

betajaen

12-03-2009 22:12:39

Video showing some progress on integrating it with nxCharacter (and NxOgre of course ;*)
http://www.youtube.com/watch?v=xAllLFYJ3qI

Look quite good even though I didn't touch the ragdoll creation, and it still doesnt work very well with the robot. Soon I will have an own animated character to experiment with.


NICE!


But with that fast moving sky; One could wonder that the Robot is going very slowly and this is a time lapsed video, or the Planet is spinning very very quickly. ;)

nargil

12-03-2009 22:22:44

or the Planet is spinning very very quickly. ;) And one could think the gravity is wrong ;) Of course the problem dissappears if you don't believe that the planets are rotating around a star ;)

betajaen

12-03-2009 22:26:09

I suppose your going to tell me that your planet is also flat as well?

Caphalor

13-03-2009 08:55:04

Look quite good even though I didn't touch the ragdoll creation, and it still doesnt work very well with the robot. Soon I will have an own animated character to experiment with.
Nice video! I am curious how it will work with your own character mesh.

nargil

14-03-2009 12:28:47

You might want to look at this: IK @ OpenTissue with ogre: http://ogre3d.org/forums/viewtopic.php?f=5&t=47172


I suppose your going to tell me that your planet is also flat as well?
Don't be silly: everyone know it's on the back of a huge turtle. Thats why we have to care about global warming, so the turtle won't get fever and die...

PS.

betajaen

14-03-2009 13:25:37

Don't be silly: everyone know it's on the back of a huge turtle. Thats why we have to care about global warming, so the turtle won't get fever and die...


I only hope that one of the elephants falls off crashes into the disc to cool it back down again, and of course Gold and Fat.

jim13c

27-03-2009 12:26:07

I'm trying to use your code in my project but i have a problem.
I use the jaiqua mesh and let it walk. The actor follows the mesh but it ignores the rotation.
If i rotate the scenenode from the mesh, the actor doens't rotate.

Any ideas?

nargil

27-03-2009 16:21:37

By actor you mean the multiple ragdoll actors, right ?

in the UpdateBoneActors() in the else section multiply the orientation by the entity orientation

(*i).mActor->setGlobalOrientation(NxOgre::NxConvert<NxQuat, Ogre::Quaternion>((*i).mBone->_getDerivedOrientation()*mEntity->getParentSceneNode()->_getDerivedOrientation() ));

BTW The CeguiMeshViewer seems to draw the bones with the correct orientation/position - even for the robot.mesh. I will soon take a look at it.

Caphalor

27-03-2009 20:28:47

BTW The CeguiMeshViewer seems to draw the bones with the correct orientation/position - even for the robot.mesh. I will soon take a look at it.
Thank you for this hint! The CEGUI mesh viewer shows the difference between the jaiqua skeleton and the robot/ninja sekeleton very well. I think that it's possible to compute the correct bone orientation based on the position of a bone relative to its parent. I'm working on it.

nargil

27-03-2009 20:57:54

Oh ! Nice to see the old jedi master to wield his sabre again ;)
[glad to see you back on the ragdolls]

nargil

28-03-2009 09:38:23

The CEGUI mesh viewer shows the difference between the jaiqua skeleton and the robot/ninja sekeleton very well.
Does it ? What is the difference, cause I don't see it. Beside the fact that the joints are larger in jaiqua.mesh (but this might be, because they have a constant size, and the jaiqua is smaller in units than ninja/robot which are extremely large)

Caphalor

28-03-2009 12:54:46

Jaiqua:
You cu can see that the bones of the jaiqua mesh really match their orientation (ok you can't because it's to small but I think the difference is visible).

nargil

28-03-2009 14:40:39

ninja: That is lame... ;)

http://ogre3d.org/forums/viewtopic.php?p=205808 <- here is the source of CMV if you haven't found it already.

And this what interests us most:

for(int i=0; i<count; i++)
{
const Bone * const currBone = skeleton->getBone(i);

if(currBone->numChildren() > 0)
{
for(int j=0; j<count; j++)
{
const Bone * const currChild = skeleton->getBone(j);

if(currBone == currChild->getParent())
{
e = mSceneMgr->createEntity("PB_#"+StringConverter::toString(i)+"."+StringConverter::toString(j), "cube.mesh");
//e->setMaterialName("BaseModel_Bones_Material");

const Vector3 diff = currBone->getWorldOrientation().Inverse() * (currChild->getWorldPosition() - currBone->getWorldPosition());
const Quaternion orient = Vector3::UNIT_Z.getRotationTo(diff.normalisedCopy());
const Real length = diff.length();

scaleTP = mEntity->attachObjectToBone(currBone->getName(), e, orient, diff.midPoint(Vector3::ZERO));
scaleTP->setScale(bone_scale,bone_scale,length * 0.01);

//mBones.push_back(e);
mEntityList.push_back (e);
}
}
}
}


A shame the cube is attached to the bone - we can't do that with physx, but at least we see the orientation calculation.

Caphalor

28-03-2009 14:56:42

Thank you for this code snippet. I implemented something similar an hour ago (using "getRotationTo(difference)"), but I think your code snippet will lead to even better results. But robot ragdoll already works very well! I will post the new code in a few hours.

Caphalor

29-03-2009 14:02:54

http://vimeo.com/3905573

Ninja ragdoll still looks a bit odd, I have to improve it (but actor bone skeleton generation works very well).

nargil

29-03-2009 14:18:57

Why is it stuttering ? Recording issue ?

Shouldn't the legs bend also ? Not only the spine at first.

Caphalor

29-03-2009 14:56:53

Why is it stuttering ? Recording issue ?
Mostly.

Shouldn't the legs bend also ? Not only the spine at first.
Yes that's a bit strange, probably some joint settings. I really learn to hate ragdolls...

nargil

31-03-2009 11:49:12

I wonder how this is made
http://www.youtube.com/watch?v=_yGJPoTnK6c

How can them both: react to bone animation, and physics ?

betajaen

31-03-2009 13:22:24

Perhaps it's using springs and motors, or interpolation between what the physx engine is saying and where the bone should be normally?

nargil

31-03-2009 14:31:29

What would we need to implement it with ogre:

1. Two entities ? One without a SceneNode to animate and get bone positions/orientations, the other with manual bone control and a ragdoll with d6 joints
2. Attach the ragdoll root bone to a NxCharacter ?
3. Apply setDriveOrientation and setDrivePosition to the d6 joints.

Thats all ?

betajaen

31-03-2009 15:14:51

I wonder if it's possible to actually make a up-right skeleton in PhysX that resists movement unless you tell it to. In a sense Ogre should suggest what pose it should be in and PhysX would try it's best to match it.

It should try and move all the bones (actors) into a specific pose (given by Ogre or something else), but resist on a bone when it comes in contact with something else, and automatically adjust for it's surroundings; feet on uneven terrain. I can see it using D6 joints with motors, forces to combat gravity to keep it up-right and damping to stop it going horribly wrong.


I was planning to write my own skeleton system in Bloody Mess, but this idea is better.

jim13c

01-04-2009 19:11:41

By actor you mean the multiple ragdoll actors, right ?

in the UpdateBoneActors() in the else section multiply the orientation by the entity orientation

(*i).mActor->setGlobalOrientation(NxOgre::NxConvert<NxQuat, Ogre::Quaternion>((*i).mBone->_getDerivedOrientation()*mEntity->getParentSceneNode()->_getDerivedOrientation() ));


I changed this line but this only rotates the actors.
I'll explain myself a little better.
What i'm trying to achieve is that when i rotate my character ( the jaiqua mesh in this case ), the actors should be positioned accordingly.
So when i rotate the character 90 degrees, the actors of the arms should be repositioned, and not only rotated.

jim13c

04-04-2009 15:22:49

Anyone has a solution for this?

To see the problem just create a ragdoll and yaw the scenenode attached to the entity 90 degrees

Caphalor

06-04-2009 20:51:37

Just change
(*i).mActor->setGlobalPosition(((*i).mBone->_getDerivedPosition() * scale) + mEntity->getParentSceneNode()->_getDerivedPosition());

to
(*i).mActor->setGlobalPosition((mEntity->getParentSceneNode()->_getDerivedOrientation() * (*i).mBone->_getDerivedPosition() * scale) + mEntity->getParentSceneNode()->_getDerivedPosition());

and do what nargil posted.

Here's the complete function:
void Ragdoll::UpdateBoneActors()
{
Ogre::Vector3 scale = mEntity->getParentSceneNode()->_getDerivedScale();
for (std::vector<sBoneActorBind>::iterator i = mSkeleton.begin(); i != mSkeleton.end(); i++)
{
//update Bone Actor
(*i).mActor->setGlobalPosition((mEntity->getParentSceneNode()->_getDerivedOrientation() * (*i).mBone->_getDerivedPosition() * scale) + mEntity->getParentSceneNode()->_getDerivedPosition());
if ((*i).mParent)
{
Ogre::Quaternion orientation = (*i).mBone->_getDerivedOrientation();
orientation = (*i).mParent->mBone->_getDerivedOrientation().Inverse() * orientation;
(*i).mJoint.mJoint->setDriveOrientation(NxOgre::NxConvert<NxQuat, Ogre::Quaternion>(orientation));
}
else
{
(*i).mActor->setGlobalOrientation(NxOgre::NxConvert<NxQuat, Ogre::Quaternion>((*i).mBoneActorGlobalBindOrientation * (*i).mBone->_getDerivedOrientation() * mEntity->getParentSceneNode()->_getDerivedOrientation()));
}

}
}


It should work, I tested it.

Status message: There still seems to be a small bug when synchronising the bones with the actors in ragdoll mode and in general the ragdoll simulation doesn't look really convincing. :cry: If I don't manage to fix it I just will post the new code for the actor bone skeleton generation so that others can base their ogre/physx ragdoll code on it.

Squall_Chua

07-04-2009 09:22:43

i tried to put the ragdoll into my project
the ragdoll looks fine in the remote debugger when the actors are controlled by the bone
however when i set it to be controlled by the actors
my mesh is being mess up like u can see in the picture



this is totally look different from the remote debugger
anyone can help with this?

nargil

07-04-2009 09:38:38

Are the bone actors falling apart in the remote debugger ? Your model may only have 1 root bone for this code to work.

Squall_Chua

07-04-2009 10:53:44

guess i would need to give the screenshot for the remote debugger for u to see the problem
this is what it looks in ogre




but this is what the actors look in the remote debugger




they look very much different though
:? :?

jim13c

07-04-2009 11:33:42

Just change
(*i).mActor->setGlobalPosition(((*i).mBone->_getDerivedPosition() * scale) + mEntity->getParentSceneNode()->_getDerivedPosition());

to
(*i).mActor->setGlobalPosition((mEntity->getParentSceneNode()->_getDerivedOrientation() * (*i).mBone->_getDerivedPosition() * scale) + mEntity->getParentSceneNode()->_getDerivedPosition());

and do what nargil posted.

Here's the complete function:
void Ragdoll::UpdateBoneActors()
{
Ogre::Vector3 scale = mEntity->getParentSceneNode()->_getDerivedScale();
for (std::vector<sBoneActorBind>::iterator i = mSkeleton.begin(); i != mSkeleton.end(); i++)
{
//update Bone Actor
(*i).mActor->setGlobalPosition((mEntity->getParentSceneNode()->_getDerivedOrientation() * (*i).mBone->_getDerivedPosition() * scale) + mEntity->getParentSceneNode()->_getDerivedPosition());
if ((*i).mParent)
{
Ogre::Quaternion orientation = (*i).mBone->_getDerivedOrientation();
orientation = (*i).mParent->mBone->_getDerivedOrientation().Inverse() * orientation;
(*i).mJoint.mJoint->setDriveOrientation(NxOgre::NxConvert<NxQuat, Ogre::Quaternion>(orientation));
}
else
{
(*i).mActor->setGlobalOrientation(NxOgre::NxConvert<NxQuat, Ogre::Quaternion>((*i).mBoneActorGlobalBindOrientation * (*i).mBone->_getDerivedOrientation() * mEntity->getParentSceneNode()->_getDerivedOrientation()));
}

}
}


It should work, I tested it.


Thank you very much, that did the trick

jim13c

19-04-2009 12:43:00

Now that our ragdoll walks in the right direction, we face another problem.
We made a terrain, generated a trianglemesh for it. This works very well for simple actors ( actors follow the terrain ).
But because all the actors of the ragdoll are in a frozen state ( controlledbybones ), the ragdoll doesnt follow the terrain ( up and down ), part because gravity has no effect on the actors.

Is there a soluton for this?

nargil

19-04-2009 13:06:40

I simply create a NxCharacter, and turn of collisions between it, and the ragdoll. Then update the ragdoll position to the nxcharacter position.

btw: Caphalor do you have some results with the new bone calculation based on positions ?

Caphalor

19-04-2009 16:44:41

btw: Caphalor do you have some results with the new bone calculation based on positions ?
Yes and no. ;) I think that it's nearly impossible to generate perfect actor skeletons for every mesh automatically, so I decided to add a small tool to my editor which allows me to tune the actor skeleton manually.
I'm sorry that it takes so much time, but I have school leaving examinations (in german: "abitur", don't know how to call it in english correctly) right now.

nargil

19-04-2009 17:07:46

OFFTOP: (in german: "abitur", don't know how to call it in englich correctly)
british english: examination(s) for GCSE (General Certificate of Secondary Education);
american english: High School Diploma examinations
;)
Anyway good luck. In Poland we say "Matura to bzdura" (it rhymes) and means "GCSE is bullshit" ;)

/OFFTOP
so I decided to add a small tool to my editor which allows me to tune the actor skeleton manually. I was thinking about doing it myself, but in that case I'll wait ;)

Caphalor

06-06-2009 23:50:36


The tool is almost done: You can rotate, move, scale and delete bone actors and set joint axis and limits. There is also a test mode where you can rotate a bone to find out which part of the mesh it moves. But something is still wrong with the runtime: For example in the remote debugger, ninja ragdoll looks very good, while ingame it shivers extremely.


<offtopic>
Anyway good luck.
Thanks. In two weeks I will find out whether it helped (then I wll get the results). ;)
In Poland we say "Matura to bzdura" (it rhymes) and means "GCSE is bullshit" ;)
:cry:

lonwolf

07-06-2009 11:11:35

It's fairly simple to get rid of this accuracy problem: just tell your 3d animators team/guy to build all the skeletons in a similar format (like the jaiqua so you can use the bone orientations to compute the physx actors, and not like the ninja). But if you plan to write a code to handle every possible modeling style, well that's impossible.
If you find the time to finish or tweak some more that bone tool you are currently working on, feel free to release the source too. I'd love to play with that code, but not in the next 2 weeks, exams are killing me.
Good job so far, didn't have the time to implement that code and play with it a bit, but I'm sure it works with proper made skeletons. Will do so later and I'll post a feedback.
And good luck with your exams too :)

SFAOK

13-08-2009 20:13:42

Has anyone managed to get this (or any ragdoll implementation) working in BloodyCake 1.5.4?

I've written automatic articulators before (in Newton), so I've got a good grasp of how to do it, but for some reason I just can't get the bodies to align correctly with the underlying skeleton.

Positioning the bodies isn't a problem, neither is getting the correct lengths, but the orientation is killing me.

I can't find Pose(...) in the latest version of NxOgre, so this:


bone_actor_bind.mActor = mNxOgreScene->createBody<NxOgre::Body>(mEntity->getName() + "_Bone_" + bone->getName(), new NxOgre::Capsule(capsule_radius, capsule_height, sp), NxOgre::Pose(bone->_getDerivedPosition() + mEntity->getParentSceneNode()->_getDerivedPosition(), mEntity->getParentSceneNode()->_getDerivedOrientation() * bone->_getDerivedOrientation()), nrp, ap);


Becomes this:


Quaternion orient = mEntity->getParentSceneNode()->_getDerivedOrientation() * currBone->_getDerivedOrientation();

OGRE3DBody* myBody = mRenderSystem->createBody(new NxOgre::Capsule(radius,length), position, "3dsCylinder.1m.mesh", desc); //desc = default values

Matrix33 mat;
mat.fromQuaternion(orient.w, orient.x, orient.y, orient.z);

myBody->setCMassGlobalOrientation(mat);




The strange thing is that the orientation calculation works perfectly fine when creating the skeleton graphics. I'm missing something here - can anyone help?

betajaen

13-08-2009 21:27:03

Hmmm. Can't you just do this?

bone_actor->setGlobalPose(fromMatrix4(ogre_bone->_getFullTransform()));

Or the other transform function?

SFAOK

14-08-2009 14:45:10

Excellent - thanks betajean. Used this in the end:

myBody->setGlobalPose(fromMatrix4(bone->_getFullTransform() * Quaternion(Degree(90), Vector3::UNIT_Z)));

Not sure why I have to rotate every bone by 90 degrees, but it works for Jaiqua and all my 3ds max exported skeletons.

EDIT : Probably due to the Cylinder mesh I use.

betajaen

14-08-2009 14:58:00

A little strange but I'm glad you used my efficient solution there. ;)

nargil

14-08-2009 23:55:59

SFAOK: how do you draw your skeletons like this http://s206.photobucket.com/albums/bb19 ... age123.png ?

Edit: Nevermind... My drawing method is ok, just the bones are exported wrong.

nargil

19-08-2009 11:11:30

Ok, here is my UpdateActorsToBones() function

void Ragdoll::UpdateActorsToBones()
{
for(std::vector<sBonesActorVis>::iterator it = mBoneActorVec.begin(); it!= mBoneActorVec.end(); it++)
{
Ogre::Matrix4 matChild;
it->bone->getWorldTransforms(&matChild);

Ogre::Matrix4 matBone;
it->parent->getWorldTransforms(&matBone);

Ogre::Vector3 b1pos,b2pos;
b1pos = matBone.getTrans() * mSceneNode->getScale();
b2pos = matChild.getTrans() * mSceneNode->getScale();

Ogre::Vector3 diff = b1pos - b2pos;
NxMat33 rotMat;
NxFindRotationMatrix(NxVec3(0.0f,1.0f,0.0f), NxOgre::NxConvert<NxVec3, Ogre::Vector3>(diff.normalisedCopy()),rotMat);
Ogre::Quaternion orient = mSceneNode->_getDerivedOrientation() * NxOgre::NxConvert<Ogre::Quaternion,NxQuat>(NxQuat(rotMat));

if(mDebug)
{
it->mVis->setPosition(mSceneNode->_getDerivedPosition() + mSceneNode->_getDerivedOrientation() * b2pos);
it->mVis->setOrientation(mSceneNode->_getDerivedOrientation() * NxOgre::NxConvert<Ogre::Quaternion,NxQuat>(NxQuat(rotMat)));
}

it->mActor->moveGlobalPose(NxOgre::Pose(mSceneNode->_getDerivedPosition() + mSceneNode->_getDerivedOrientation() * (b2pos+it->ActorToBoneOffset), orient));
}
}
consider ActorToBoneOffset a ZERO vector.

This function works great.

I have a problem writing the UpdateBonesToActors(), because I'm not really good at this quaternion math. How should I reverse the process ?

SFAOK

10-09-2009 16:52:30

Can I disable collisions between two, or a group of rigid bodies in BloodyMess?

I've written a ragdoll generator, but the figure shakes around like crazy.

Caphalor used :

mScene->setActorPairFlags(mActor1, mActor2, NX_IGNORE_PAIR);
But I can't find the equivilent in 1.5.4...

EDIT : Ych too much caffine - #include "NxScene.h" did the trick!