[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] | [ Search: ] |
Written by Alexandru - Teodor Voicu, voicualexandruteodor@gmail.com.
Furmeshes support a variety of animations, from simple inherited animations, that come from objects on which the furmesh is attached, to complex animations, based on physics objects, such as Bullet ropes.
There are three main interfaces that can be used for animating furmeshes:
iFurAnimationControl
. This interface only provides the most basic methods
needed to update guide fur strands positions (see section Furmesh Mesh Object) on each
frame. It can be used to initially set up the furs directions and disable it
afterwards.
iFurAnimatedMeshControl
. This interface extends the
iFurAnimationControl
in order to support simple animations inherited from
the base mesh. As the name suggest this only works with AnimatedMeshes, but can be
easily extended to support other types of meshes that provide access to positions,
normals, tangents and binormals render buffers.
iFurPhysicsControl
. Although the iFurAnimatedMeshControl
can be used
for animating fur, for animating hairs, physical forces, such as gravity or winds
or adequate response to movement, had to be added, using dynamic systems. The
iFurPhysicsControl
interface is designed to work with Bullet dynamic system
to provide a physical simulation for hair on Animated Meshes.
Creating both iFurAnimatedMeshControl
and iFurPhysicsControl
is done
via the iFurMeshType
interface, using the CreateFurAnimatedMeshControl
,
respectively the CreateFurPhysicsControl
methods.
An example of creating such iFurAnimationControl
interfaces is:
... // Load furMesh csRef<CS::Mesh::iFurMeshType> furMeshType = csQueryRegistry<CS::Mesh::iFurMeshType> (hairTest->object_reg); if (!furMeshType) return hairTest->ReportError("Failed to locate CS::Mesh::iFurMeshType plugin!"); ... // Create Hair Physics Control hairPhysicsControl = scfQueryInterface<CS::Mesh::iFurPhysicsControl> (furMeshType->CreateFurPhysicsControl("krystal_hairs_physics")); // Set up Hair Physics Control hairPhysicsControl->SetBulletDynamicSystem(hairTest->bulletDynamicSystem); hairPhysicsControl->SetRigidBody(headBody); hairPhysicsControl->SetAnimatedMesh(animesh); ... // Create Animation Physics Control animationPhysicsControl = scfQueryInterface<CS::Mesh::iFurAnimatedMeshControl> (furMeshType->CreateFurAnimatedMeshControl("krystal_hairs_animation")); // Set Animation Physics Control animationPhysicsControl->SetAnimatedMesh(animesh); animationPhysicsControl->SetDisplacement(ifms->GetDisplacement()); ... // Regiseter Animation Control with the furmesh furMesh->SetAnimationControl(animationPhysicsControl); furMesh->StartAnimationControl(); ... |
This document was generated using texi2html 1.76.