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 udwordGetIndices () const
 
inline_ const LeafTrianglesGetLeafTriangles () 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 MeshInterfaceGetMeshInterface () const
 
inline_ udword GetModelCode () const
 
inline_ udword GetNbNodes () const
 
inline_ const AABBTreeGetSourceTree () const
 
inline_ const AABBOptimizedTreeGetTree () const
 
inline_ AABBOptimizedTreeGetTree ()
 
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

udwordmIndices
 Array of primitive indices. More...
 
udword mNbLeaves
 Number of leaf nodes in the model. More...
 
udword mNbPrimitives
 Number of primitives in the model. More...
 
LeafTrianglesmTriangles
 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 MeshInterfacemIMesh
 User-defined mesh interface. More...
 
udword mModelCode
 Model code = combination of ModelFlag(s) More...
 
AABBTreemSource
 Original source tree. More...
 
AABBOptimizedTreemTree
 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 May 8 2021 02:42:43