Métodos públicos | Atributos públicos | Métodos protegidos | Atributos protegidos

Referencia de la Clase Model3D

Clase base abstracta para el cargado de un modelo. Más...

#include <Model3D.h>

Diagrama de herencias de Model3D
OpenGLModel

Lista de todos los miembros.

Métodos públicos

 Model3D (const char *strPath)
bool isModelLoaded ()
void process (bool bUpdateBBox=false)
bool hasAnimations ()
int numberOfAnimations ()
char * animationName (unsigned int n)
bool setAnimation (unsigned int n, float fSecondsIni=0.0f, float fSecondsEnd=0.0f)
int getActualAnimation ()
void disableAnimation ()
void advance (float fSeconds)
void setAnimationTime (float fSeconds)
virtual ~Model3D (void)

Atributos públicos

Vector3 oSceneMin
Vector3 oSceneMax
Vector3 oSceneCenter
Vector3 oUpdatedSceneMin
Vector3 oUpdatedSceneMax
Vector3 oUpdatedSceneCenter

Métodos protegidos

virtual void preProcess ()
virtual void applyTransformation (float *fMatrix4Data)=0
virtual void unApplyLastTransformation ()=0
virtual void processMesh (const struct aiMaterial *pMtl, const struct aiFace *pFaces, unsigned int nNumFaces, aiVector3D *aVertices, aiColor4D *aColorsByVertexIndex, aiVector3D *aNormalsByVertexIndex, aiVector3D *aTextureCoordsByVertexIndex)=0
virtual void postProcess ()

Atributos protegidos

struct aiScene * _pScene
SceneAnimator * _pSceneAnimator
float _fSecondsCount
float _fSecondsCountIni
float _fSecondsCountEnd
int _nActualAnimation
aiVector3D * _aVertices
bool * _aVertexModified
unsigned int maxMeshVertices
bool _bFirstBBoxUpdate

Descripción detallada

Clase base abstracta para el cargado de un modelo.

Es responsable del cargado del modelo, manejo de la animacion y procesamiento de la estructura del modelo. Un modelo esta formado por una estructura jerarquica de nodos. Cada nodo tiene una matriz de transformacion asociada, puede tener varias mallas de vertices y puede tener nodos hijos. Cada malla de vertices esta asociada a un material (incluye textura e informacion de color y luz). La funcion "process()" es la funcion encargada del procesamiento del modelo. Al ejecutarse, primero se ejecuta "preProcess()" para realizar cualquier accion necesaria antes del comienzo del procesamiento del modelo y lo ultimo que se ejecuta es "postProcess()" al final de "process()". Para cada nodo "process()" realiza la transformacion correspondiente llamando a "applyTransformation(float* fMatrix4Data)" donde fMatrix4Data son los valores de una matriz4x4 en formato compatible con OpenGL. Luego de procesado un nodo se llama a "unApplyLastTransformation()" donde se debe deshacer la transformacion del nodo (ej OpenGL: si al hacer applyTransformation se hizo glPushMatrix() y luego se aplico la transformacion, entonces en este caso se debera hacer glPopMatrix para volver al estado anterior a la transformacion). Luego de aplicada la transformacion del nodo, se llama a "processMesh" para realizar las acciones deseadas con los datos del modelo. Los vectores "oSceneMin" y "oSceneMax" representan una Bounding Box alineada a los ejes que contiene al modelo en estado no animado y "oSceneCenter" es el centro de esa Bounding Box. En caso de que se desee el modelo centrado hay que realizar una traslacion de -oSceneCenter. Las clases derivadas deben de encargarse de implementar opcionalmente las acciones de "preProcess()" y "postProcess()" y obligatoriamente de "applyTransformation", "unApplyLastTransformation" y "processMesh". Ver "OpenGLModel" como ejemplo.


Documentación del constructor y destructor

Model3D::Model3D ( const char *  strPath  ) 

Constructora recibe la ruta al archivo del modelo.

Model3D::~Model3D ( void   )  [virtual]

Destructora, elimina estructuras auxiliares


Documentación de las funciones miembro

void Model3D::advance ( float  fSeconds  ) 

Tiempo de avance en segundos para la animacion, en caso de que no haya animacion seleccionada no tiene efecto.

char * Model3D::animationName ( unsigned int  n  ) 

Devuelve el nombre de la n-animacion, en caso de que no exista devuelve NULL

virtual void Model3D::applyTransformation ( float *  fMatrix4Data  )  [protected, pure virtual]

Aplica la transformacion correspondiente al nodo actual procesado. La transformacion es relativa a la transformacion del nodo padre.

Parámetros:
fMatrix4Data arreglo de 16 floating-points que corresponden a una matriz de 4x4. link con explicacion del formato de la matriz http://www.sjbaker.org/steve/omniv/matrices_can_be_your_friends.html

Implementado en OpenGLModel.

void Model3D::disableAnimation (  ) 

El modelo pasa a no tener una animacion seleccionada.

int Model3D::getActualAnimation (  ) 

Devuelve la animacion actual seleccionada, -1 en caso de que no haya una animacion seleccionada.

bool Model3D::hasAnimations (  ) 

Devuelve true en caso de que el modelo tenga animaciones.

bool Model3D::isModelLoaded (  ) 

Retorna si el modelo fue cargado correctamente.

int Model3D::numberOfAnimations (  ) 

Devuelve cantidad de animaciones.

virtual void Model3D::postProcess (  )  [inline, protected, virtual]

Funcion encargada de realizar cualquier accion necesaria luego de terminado el procesamiento del modelo.

Reimplementado en OpenGLModel.

virtual void Model3D::preProcess (  )  [inline, protected, virtual]

Funcion encargada de realizar cualquier accion necesaria antes del comienzo del procesamiento del modelo.

Reimplementado en OpenGLModel.

void Model3D::process ( bool  bUpdateBBox = false  ) 

Procesa el modelo. La funcion "process()" es la funcion encargada del procesamiento del modelo. Al ejecutarse, primero se ejecuta "preProcess()" para realizar cualquier accion necesaria antes del comienzo del procesamiento del modelo y lo ultimo que se ejecuta es "postProcess()" luego de haber terminado el procesamiento. Para cada nodo del modelo se realiza la transformacion correspondiente llamando a "applyTransformation(float* fMatrix4Data)" donde fMatrix4Data son los valores de una matriz 4x4 en formato compatible con OpenGL. Luego de aplicada la transformacion del nodo, se llama a "processMesh" para realizar las acciones deseadas con los datos del modelo para el nodo actual (las posiciones de los vertices son relativas la posicion absoluta del nodo actual). En caso de que el nodo actual tenga hijos se procesan los nodos hijos. Luego de procesado un nodo y sus hijos se llama a "unApplyLastTransformation()" donde se debe deshacer la transformacion del nodo (ej OpenGL: si al hacer applyTransformation se hizo glPushMatrix() y luego se aplico la transformacion, entonces en este caso se debera hacer glPopMatrix para volver al estado anterior a la transformacion).

Parámetros:
bUpdateBBox indica si se calcula nuevamente el bounding box del modelo para la posicion actual de la animacion.
virtual void Model3D::processMesh ( const struct aiMaterial *  pMtl,
const struct aiFace *  pFaces,
unsigned int  nNumFaces,
aiVector3D *  aVertices,
aiColor4D *  aColorsByVertexIndex,
aiVector3D *  aNormalsByVertexIndex,
aiVector3D *  aTextureCoordsByVertexIndex 
) [protected, pure virtual]

Funcion encargada de procesar las mallas de vertices de cada nodo. Es llamada una vez por cada malla de vertices de cada nodo.

Parámetros:
pMtl arreglo de materiales correspondientes a la malla de vertices de la funcion.
pFaces arreglo de triangulos y quads que forman la malla de vertices.
nNumFaces indica cuantos elementos hay en pFaces.
aVertices arreglo de vertices a los que hacen referencia los elementos en pFaces. Los arreglos aColorsByVertexIndex, aNormalsByVertexIndex y aTextureCoordsByVertexIndex contienen informacion de color, normales y coordenadas de textura para cada elemento del arreglo de vertices. Nota: los struct comenzados con aiXXXX son definidos por la libreria Assimp. Para su manipulacion se recomienda ver una implementacion de Model3D de ejemplo o ver documentacion de Assimp.

Implementado en OpenGLModel.

bool Model3D::setAnimation ( unsigned int  n,
float  fSecondsIni = 0.0f,
float  fSecondsEnd = 0.0f 
)

Setea la animacion a utilizar, se puede limitar la ejecucion de la animacion al intervalo comprendido entre fSecondsIni y fSecondsEnd. En caso de que no formen un intervalo valido no se aplica el limite a la animacion. Por defecto fSecondsIni y fSecondsEnd no forman un intervalo valido.

void Model3D::setAnimationTime ( float  fSeconds  ) 

Establece el modelo en el tiempo fSeconds de la animacion actual, en caso de que no haya animacion seleccionada no tiene efecto.

virtual void Model3D::unApplyLastTransformation (  )  [protected, pure virtual]

Desaplica la transformacion correspondiente al nodo actual.

Implementado en OpenGLModel.


Documentación de los datos miembro

Indica el centro del bounding box del modelo en estado original.

Vector maximo del bounding box del modelo en estado original.

Vector minimo del bounding box del modelo en estado original.

Indica el centro del bounding box del modelo en el ultimo momento que se calculo.

Vector maximo del bounding box del modelo en el ultimo momento que se calculo.

Vector minimo del bounding box del modelo en el ultimo momento que se calculo.


La documentación para esta clase fue generada a partir de los siguientes ficheros: