Cargando un objeto

De CursosGpl

cargando un objeto
cargando un objeto

quinta parte del tutorial

En este capítulo cargamos un objeto en formato xml de CrystalSpace y lo añadimos al sector.

código c++

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;

}

Herramientas personales