Public Member Functions | Private Member Functions | Private Attributes | List of all members
HybridModel Class Reference

#include <OPC_HybridModel.h>

Inheritance diagram for HybridModel:
Inheritance graph
[legend]

Public Member Functions

inline_ const udword * GetIndices () const
 
inline_ const LeafTriangles * GetLeafTriangles () const
 
 HybridModel ()
 
 override (BaseModel) bool Build(const OPCODECREATE &create)
 
 override (BaseModel) udword GetUsedBytes() const
 
 override (BaseModel) bool Refit()
 
virtual ~HybridModel ()
 
- Public Member Functions inherited from BaseModel
 BaseModel ()
 
virtual bool Build (const OPCODECREATE &create)=0
 
inline_ const MeshInterface * GetMeshInterface () const
 
inline_ udword GetModelCode () const
 
inline_ udword GetNbNodes () const
 
inline_ const AABBTree * GetSourceTree () const
 
inline_ const AABBOptimizedTree * GetTree () const
 
inline_ AABBOptimizedTree * GetTree ()
 
virtual udword GetUsedBytes () const =0
 
inline_ BOOL HasLeafNodes () const
 
inline_ BOOL HasSingleNode () const
 
inline_ BOOL IsQuantized () const
 
virtual bool Refit ()
 
inline_ void SetMeshInterface (const MeshInterface *imesh)
 
virtual ~BaseModel ()
 

Private Member Functions

void Release ()
 

Private Attributes

udword * mIndices
 Array of primitive indices. More...
 
udword mNbLeaves
 Number of leaf nodes in the model. More...
 
udword mNbPrimitives
 Number of primitives in the model. More...
 
LeafTriangles * mTriangles
 Array of mNbLeaves leaf descriptors. More...
 

Additional Inherited Members

- Protected Member Functions inherited from BaseModel
bool CreateTree (bool no_leaf, bool quantized)
 
void ReleaseBase ()
 
- Protected Attributes inherited from BaseModel
const MeshInterface * mIMesh
 User-defined mesh interface. More...
 
udword mModelCode
 Model code = combination of ModelFlag(s) More...
 
AABBTree * mSource
 Original source tree. More...
 
AABBOptimizedTree * mTree
 Optimized tree owned by the model. More...
 

Detailed Description

An hybrid collision model.

The problem :

Opcode really shines for mesh-mesh collision, especially when meshes are deeply overlapping (it typically outperforms RAPID in those cases).

Unfortunately this is not the typical scenario in games.

For close-proximity cases, especially for volume-mesh queries, it's relatively easy to run faster than Opcode, that suffers from a relatively high setup time.

In particular, Opcode's "vanilla" trees in those cases -can- run faster. They can also use -less- memory than the optimized ones, when you let the system stop at ~10 triangles / leaf for example (i.e. when you don't use "complete" trees). However, those trees tend to fragment memory quite a lot, increasing cache misses : since they're not "complete", we can't predict the final number of nodes and we have to allocate nodes on-the-fly. For the same reasons we can't use Opcode's "optimized" trees here, since they rely on a known layout to perform the "optimization".

Hybrid trees :

Hybrid trees try to combine best of both worlds :

All of that is wrapped in this "hybrid model" that contains the minimal data required for this to work. It's a mix between old "vanilla" trees, and old "optimized" trees.

Extra advantages:

Information to take home:

Author
Pierre Terdiman
Version
1.3
Date
May, 18, 2003

Definition at line 46 of file OPC_HybridModel.h.

Constructor & Destructor Documentation

HybridModel::HybridModel ( )
virtual HybridModel::~HybridModel ( )
virtual

Member Function Documentation

inline_ const udword* HybridModel::GetIndices ( ) const
inline

Gets array of indices.

Returns
array of indices

Definition at line 94 of file OPC_HybridModel.h.

inline_ const LeafTriangles* HybridModel::GetLeafTriangles ( ) const
inline

Gets array of triangles.

Returns
array of triangles

Definition at line 86 of file OPC_HybridModel.h.

HybridModel::override ( BaseModel  ) const

Builds a collision model.

Parameters
create[in] model creation structure
Returns
true if success
HybridModel::override ( BaseModel  ) const

Gets the number of bytes used by the tree.

Returns
amount of bytes used
HybridModel::override ( BaseModel  )

Refits the collision model. This can be used to handle dynamic meshes. Usage is:

  1. modify your mesh vertices (keep the topology constant!)
  2. refit the tree (call this method)
    Returns
    true if success
void HybridModel::Release ( )
private

Member Data Documentation

udword* HybridModel::mIndices
private

Array of primitive indices.

Definition at line 100 of file OPC_HybridModel.h.

udword HybridModel::mNbLeaves
private

Number of leaf nodes in the model.

Definition at line 97 of file OPC_HybridModel.h.

udword HybridModel::mNbPrimitives
private

Number of primitives in the model.

Definition at line 99 of file OPC_HybridModel.h.

LeafTriangles* HybridModel::mTriangles
private

Array of mNbLeaves leaf descriptors.

Definition at line 98 of file OPC_HybridModel.h.


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


openhrp3
Author(s): AIST, General Robotix Inc., Nakamura Lab of Dept. of Mechano Informatics at University of Tokyo
autogenerated on Sat Apr 13 2019 02:14:28