Cafu Engine
AnimPoseT Class Reference

This class describes a specific pose of an associated model. More...

#include "AnimPose.hpp"

Classes

struct  MeshInfoT
 The instances of this struct parallel and augment the CafuModelT::MeshT instances in the related CafuModelT. More...
 
struct  TraceResultT
 This class describes the result of tracing a ray or a bounding box against the model. More...
 

Public Member Functions

 AnimPoseT (const CafuModelT &Model, IntrusivePtrT< AnimExpressionT > AnimExpr)
 The constructor. More...
 
 ~AnimPoseT ()
 The destructor. More...
 
IntrusivePtrT< AnimExpressionTGetAnimExpr () const
 Returns the current anim expression of this pose. More...
 
void SetAnimExpr (IntrusivePtrT< AnimExpressionT > AnimExpr)
 Sets a new anim expression to use for this pose. More...
 
void SetSuperPose (const AnimPoseT *SuperPose)
 This method assigns a pose of a parent or "super" model that should be used when rendering this model. More...
 
void SetNeedsRecache ()
 Call this if something in the related model has changed. More...
 
void Draw (int SkinNr, float LodDist) const
 This method renders the model in this pose. More...
 
bool GetGuiPlane (unsigned int GFNr, Vector3fT &Origin, Vector3fT &AxisX, Vector3fT &AxisY) const
 Returns the origin, x-axis and y-axis vectors for the given Gui fixture. More...
 
bool TraceRay (int SkinNr, const Vector3fT &RayOrigin, const Vector3fT &RayDir, TraceResultT &Result) const
 Traces a ray against this model in this pose, and returns whether it was hit. More...
 
unsigned int FindClosestVertex (unsigned int MeshNr, unsigned int TriNr, const Vector3fT &P) const
 Considers the given triangle in the given mesh, and returns the vertex that the given point P is closest to in this pose. More...
 
const ArrayT< MatrixT > & GetJointMatrices () const
 Returns the set of transformation matrices (one per joint) at the given sequence and frame number. More...
 
const MatrixTGetJointMatrix (const std::string &JointName) const
 Returns the transformation matrix for the joint with the given name, or NULL if there is no such joint. More...
 
const ArrayT< MeshInfoT > & GetMeshInfos () const
 Returns the mesh infos with additional data for each mesh in this pose. More...
 
const ArrayT< MatSys::MeshT > & GetDrawMeshes () const
 Returns the MatSys meshes for the model in this pose. More...
 
const BoundingBox3fTGetBB () const
 Returns the bounding-box for the model in this pose. More...
 

Detailed Description

This class describes a specific pose of an associated model.

A pose is defined (or "configured") by an AnimExpressionT instance whose application to the model yields all data that is relevant for further actions on the model in that pose, such as rendering, tracing rays, collision detection, etc.

The data that is derived from the anim expression is cached within the pose instance. It comprises:

  • the transformation matrices for each joint in the skeleton,
  • the MatSys render meshes for each mesh,
  • tangent space vectors for each vertex in each mesh. In essence, this "externalizes" all data that is specific to a pose from the representation of a model (the CafuModelT instance). As a consequence, AnimPoseT instances should be shared whenever there are multiple users (such as "static detail model" entity instances) that all show the same model in the same pose.

Constructor & Destructor Documentation

AnimPoseT::AnimPoseT ( const CafuModelT Model,
IntrusivePtrT< AnimExpressionT AnimExpr 
)

The constructor.

AnimPoseT::~AnimPoseT ( )

The destructor.

Member Function Documentation

void AnimPoseT::Draw ( int  SkinNr,
float  LodDist 
) const

This method renders the model in this pose.

The current MatSys model-view matrix determines the position and orientation.

Parameters
SkinNrThe skin to render the model with, -1 for the default skin.
LodDistThe distance to the camera for reducing the level-of-detail.
unsigned int AnimPoseT::FindClosestVertex ( unsigned int  MeshNr,
unsigned int  TriNr,
const Vector3fT P 
) const

Considers the given triangle in the given mesh, and returns the vertex that the given point P is closest to in this pose.

The returned number is the index of the vertex in the mesh, not the (0, 1 or 2) index in the triangle.

IntrusivePtrT<AnimExpressionT> AnimPoseT::GetAnimExpr ( ) const
inline

Returns the current anim expression of this pose.

const BoundingBox3fT & AnimPoseT::GetBB ( ) const

Returns the bounding-box for the model in this pose.

const ArrayT< MatSys::MeshT > & AnimPoseT::GetDrawMeshes ( ) const

Returns the MatSys meshes for the model in this pose.

bool AnimPoseT::GetGuiPlane ( unsigned int  GFNr,
Vector3fT Origin,
Vector3fT AxisX,
Vector3fT AxisY 
) const

Returns the origin, x-axis and y-axis vectors for the given Gui fixture.

The return value indicates whether the vectors could successfully be returned in the reference parameters (the method can fail if e.g. the model has no such Gui fixture or the Gui fixture is improperly specified).

const ArrayT< MatrixT > & AnimPoseT::GetJointMatrices ( ) const

Returns the set of transformation matrices (one per joint) at the given sequence and frame number.

const MatrixT * AnimPoseT::GetJointMatrix ( const std::string &  JointName) const

Returns the transformation matrix for the joint with the given name, or NULL if there is no such joint.

const ArrayT< AnimPoseT::MeshInfoT > & AnimPoseT::GetMeshInfos ( ) const

Returns the mesh infos with additional data for each mesh in this pose.

void AnimPoseT::SetAnimExpr ( IntrusivePtrT< AnimExpressionT AnimExpr)

Sets a new anim expression to use for this pose.

Parameters
AnimExprThe new anim expression to use for this pose.
void AnimPoseT::SetNeedsRecache ( )
inline

Call this if something in the related model has changed.

void AnimPoseT::SetSuperPose ( const AnimPoseT SuperPose)

This method assigns a pose of a parent or "super" model that should be used when rendering this model.

For example, a player model can act as the super model for a weapon, so that the skeleton of the weapon is copied from the player model in order to align the weapon with the hands of the player.

Parameters
SuperPoseThe super model pose that should be used when rendering this model.
bool AnimPoseT::TraceRay ( int  SkinNr,
const Vector3fT RayOrigin,
const Vector3fT RayDir,
TraceResultT Result 
) const

Traces a ray against this model in this pose, and returns whether it was hit.

The ray for the trace is defined by RayOrigin + RayDir*Fraction, where Fraction is a scalar >= 0.

Parameters
SkinNrThe skin to use for the trace, use -1 for the default skin.
RayOriginThe point in model space where the ray starts.
RayDirA unit vector in model space that describes the direction the ray extends to.
ResultIf the model was hit, this struct contains additional details of the hit.
Returns
true if the ray hit the model, false otherwise. When the model was hit, additional details are returned via the Result parameter.

The documentation for this class was generated from the following files: