Cargando un objeto
De CursosGpl
quinta parte del tutorial
En este capítulo cargamos un objeto en formato xml de CrystalSpace y lo añadimos al sector.
Tabla de contenidos |
[editar] Conceptos
[editar] Factorías de Objetos
Normalmente para crear un objeto primero necesitamos una factoría de objetos.
La factoría es un objeto que contiene toda la información necesaria para crear otros objetos. Sirve para crear muchos objetos iguales, pero que luego se pueden mover y animar por separado.
Cargamos la factoría en el motor usando el cargador de objetos iLoader
csRef<iMeshFactoryWrapper> factoría = loader->LoadMeshObjectFactory ("/lib/std/sprite1")
En este caso la factoría corresponde a un Sprite3D, la factoría. Y es un objeto que viene en la librería estándard de CrystalSpace.
Luego creamos el objeto usando el motor
engine->CreateMeshWrapper(...)
[editar] Interfaces adicionales en los objetos de malla
CrystalSpace contiene muchos tipos de objeto de malla diferentes, cada uno con unas peculiaridades y caracteríasticas. Todos ellos se pueden crear desde el motor y referenciar a partir de un interfaz iMeshWrapper.
Podemos obtener otros interfaces soportados por los objetos de malla utilizando la macro SCF_QUERY_INTERFACE.
SCF_QUERY_INTERFACE (sprite->GetMeshObject (), iSprite3DState)
Cada tipo de malla suele tener un interfaz relacionado llamado iTipoState, que nos da acceso a funcionalidad específica del tipo de malla que estemos tratando.
Algunos tipos de malla son Ball, GeneralMesh, ThingMesh, Sprite2D, Sprite3D, SpriteCal3D...
[editar] Programación
[editar] Función que crea el objeto
de tut2.cpp
bool DelBase::CreaObjetoDePrueba()
{
csRef<iMeshFactoryWrapper> imeshfact (loader->LoadMeshObjectFactory (
"/lib/std/sprite1"));
if (imeshfact == 0)
{
csReport (object_reg, CS_REPORTER_SEVERITY_ERROR,
"crystalspace.application.simple1",
"Error loading mesh object factory!");
return false;
}
// Añadir el objeto al motor.
csRef<iMeshWrapper> sprite (engine->CreateMeshWrapper (
imeshfact, "MiSprite", room,
csVector3 (-3, 5, 3)));
csMatrix3 m; m.Identity (); m *= 5.;
sprite->GetMovable ()->SetTransform (m);
sprite->GetMovable ()->UpdateMove ();
csRef<iSprite3DState> spstate (
SCF_QUERY_INTERFACE (sprite->GetMeshObject (), iSprite3DState));
spstate->SetAction ("default");
sprite->SetZBufMode (CS_ZBUF_USE);
sprite->SetRenderPriority (engine->GetObjectRenderPriority ());
return true;
}

