Usando .net en Torque: ejemplo práctico (conexión a postgresql)

Escrito por aserrano. Posteado en C++, Desarrollo, Juegos, Motores 3D, Torque

Si te gusta usar .net, puedes hacer que haga algunas tareas en Torque.

Esto es sólo un ejemplo de como usar .net en Torque.

Todo el código fuente es gratis y lo puedes usar bajo tu responsabilidad.

Si necesitas más referencias ve a la página web de MSDN o GarageGames. Alguna información ha sido extraída de esas páginas.

Para este ejemplo se ha usado Visual C# 2005, Visual C++ 2008 y las librerías de Mono (ms 2.0) para la  conexión a PostgreSQL

Vamos a obtener la versión  de la base de datos  que es muy similar a hacer un “select” o un “insert”.

Como primer paso creamos una DLL (ClassLibrary) en C#.

Editamos el código fuente, añadimos el interface público y cambiamos su nombre. Este interface lo usaremos para exponer su métodos a través de COM.

Añadimos también la funcionalidad Postgres, en este caso, sólo un “select version()”.

[sourcecode lang=”cpp”]

using Npgsql;

namespace Database
{
public interface IPGDatabase
{
String pgVersion();
}

public class PGDatabase : IPGDatabase
{

conn = new NpgsqlConnection(“Server=192.168.11.150;Port=5432;User Id=user;Password=secret;Database=DBl;”);
conn.Open();

NpgsqlCommand command = new NpgsqlCommand(“select version()”, conn);
String serverversion;

[/sourcecode]

Para exponer el interface com debemos editar el fichero AssemblyInfo.cs y cambiar la línea”[assembly: ComVisible(false)]” por “[assembly: ComVisible(true)]”.

Creamos ahora un nombre fuerte a nuestra DLL. Desde el prompt de Visual Studio teclea “snk.exe -k database.snk”. Copia este fichero al proyecto, edita las propiedades del proyecto y ve a la pestaña de firmar. Pincha sobre “Firmar el ensamblado” y elige el fichero recien creado.

Compila el proyecto para crear la DLL Managed

Vamos a registrar la información de ensamblado de la DLL.

Desde un prompt de Visual Studio, ve al directorio donde esté la DLL y teclea

regasm database.dll /tlb:database.tlb /codebase


Copia este fichero al proyecto Torque

Crea una clase en Torque y prepárala para usarla en la consola como el ejemplo de abajo (si tienes dudas ve a la página web de GarageGames)

[sourcecode lang=”cpp”]

class DBVersion: public SimObject
{

public:

DECLARE_CONOBJECT( DBVersion );

IMPLEMENT_CONOBJECT( DBVersion );

ConsoleMethod(DBVersion,getVersion, const char*, 2, 2,”()Returns the postgresql.”)

[/sourcecode]
Importa el fichero .tlb añadiendo la línea “#import “..gamedatabase.tlb” raw_interfaces_only”, y usa el nuevo espacio de nombres recien creado “using namespace database

Si todo ha ido bien, tendremos acceso a nuestra dll managed

Creamos el puntero al interface y llamamos a nuestra función

[sourcecode lang=”cpp”]

HRESULT hr=CoInitialize(NULL);

IPGDatabasePtr pIDatabase(__uuidof(PGDatabase));

long lResult=0;

pIDatabase->pgVersion(&bstrstring);

CoUninitialize();

[/sourcecode]

Como la DLL está devolviendo una cadena BSTR, necesitaremos hacer una pequeña conversion:

[sourcecode lang=”cpp”]

_bstr_t _bstrstring(bstrstring);
strcpy_s(version, (char *)_bstrstring);
return (StringTableEntry) &version[0];
[/sourcecode]

Tiempo de probarlo. Compila el proyecto, ejecuta el motor de juegos torque, abre la consola y teclea:

$a=new DBVersion();
echo($a.getVersion());

Código fuente

¡Disfrútalo!

Notar que esto es sólo un ejemplo. No hay control de errores, el código se puede mejorar,…

Terrenos en Torque usando L3DT

Escrito por aserrano. Posteado en Blender, C++, Juegos, Linux, Motores 3D, Torque

Vamos a hablar de como generar rapidamente terrenos para Torque en Torque Game Engine Advanced 1.7.0.

TGEA 1.7.0 incluye ahora un nuevo sistema de megaterrenos llamado MegaTerrain. Megaterrain nos permite incluir varios terrenos individuales dentro de las misiones de Torque.

Pero nosotros vamos a ver como exportar un terreno para al anterior sistema Atlas 2 usando la herramienta Large 3D Terrain de bundysoft. Decir que la herramienta tiene dos versiones y la que se compra en GarageGames cuesta unos 35$ y lleva el plugin de exportación para Atlas.

Esta herramienta provee un tutorial muy interesante que nos hará un terreno en pocos minutos. Seguidlo y generar un terreno de 1024×1024 pixeles, como se ve en las imágenes.

Una vez finalizado el tutorial grabar el proyecto y usar la opción de exportación File–>Export–>To torque Atlas(garagegames plugin). Este plugin tiene todavia algunos bugs con terrenos grandes.

Con el terreno generado es hora de ponerlo en Torque en nuestro fichero de misión con el siguiente código:

new AtlasInstance(NewTerrain) {
canSaveDynamicFields = “1”;
Enabled = “1”;
position = “0 0 0”;
rotation = “1 0 0 0”;
scale = “1 1 1”;
atlasFile = “scriptsAndAssets/data/export/miterreno.atlas”;
lightmapDimension = “256”;
};

Truco: si no veis el terreno, seleccionadlo con “World Editor inspector” y haceis un drop selection.


Desarrollo de juegos: un poco de bibliografía

Escrito por aserrano. Posteado en C++, Desarrollo, Juegos, Motores 3D, Ogre, Torque

Debemos tener presente que el desarrollo de juegos, dentro de lo que a programación se refiere, es de los desarrollos software más exigentes.

Si encima hablamos de desarrollo de juegos 3D entonces nos vamos a unos perfiles muy altos en los que el desarrollador debe tener conocimientos muy fuertes de matemáticas 3D y posiblemente un alto nivel de C++ y algún que otro perfil que ahora veremos.

Voy a exponer los libros que me he leído o estoy leyendo, todos ellos en un perfecto inglés, lo que hace que sea otro requisito añadido a nuestro desarrollo.

Existir, existen muchos más, y desde luego cuantos más entendamos pues mejor…

Matemáticas:3D Math Primer for Graphics and Game Development (Fletcher Dunn and Ian Parberry)

Este libro de matemáticas puras orientado a la programación 3D y con algoritmos en C++ es un must-have en vuestra biblioteca. Yo no lo he leído completo, si lo hubiese hecho estaría en la Nasa o algo así… :)… pero desde luego lo tengo siempre encima de la mesa como referencia.

Bromas aparte este libro es simple de leer, me refiero al inglés, y si no sabéis lo que es un vector, una matriz o un quaternion, vais a tener complicado en lograr algo de éxito en vuestro proyecto, por lo que insisto, es un buen libro para tener en casa.

Inteligencia artificial: Programming AI Game by Example (Matt Buckland)

El título lo dice todo, después de un breve capítulo introductorio de matemáticas aborda temas como el ataque de un bot, algoritmos de trayectos, es decir, como un bot encuentra el camino para darte dos sopapos, o incluso temas de scripting en LUA.

Otro libro a tener en casa.

Ogre: Pro Ogre 3D Programming (Gregory Junker)

Un libro dedicado a la versión Eihort de Ogre que cubre todos los aspectos más destacados de este motor de renderizado 3D.

Este libro no es desarrollo de juegos en sí, sólo habla de todas las capacidades de Ogre y de como exprimirlas.

Como bien sabéis además Ogre se programa en C++ por lo que si sabéis C++ es lo primero que deberías aprender para poder afrontar este libro.

Desarrollo juegos: Game programming GEMS 6 (Varios autores, editado por Michael Dickheiser)

Toda la saga de estos libros, notad el 6, desarrollan en varios artículos y redactados por los mejores desarrolladores de juegos del mundo, cada uno los aspectos de un juego, matemáticas, sonido, inteligencia artificial, red, etc.

Decid que los artículos aparte de un must-have en nuestra biblioteca cubren apartados muy difíciles del desarrollo de  un juego.

Por tanto, ¿es recomendable?, sí, pero requiere un alto nivel que si no se tiene se debería alcanzar antes de meternos con él.

Torque: 3D Game Programming All in One, Second Edition (Kenneth C. Finney)

Este libro está entero dedicado a Torque y a como desarrollar un juego sólo con el scripting que lleva el motor Torque. Decir que el libro son 850 páginas y que es un buenísimo punto de partida para empezar con Torque ya que cubre absolutamente todos los aspectos del desarrollo de un juego con Torque, desde el modelado, pasando por la red, la parte cliente, etc.

Torque: The Game Programmer’s Guide to Torque: Under the Hood of the Torque Game Engine (GarageGames)

Esta es la guía oficial de GarageGames, los chicos de Torque, que hacen sobre su motor.

Decir que más que un libro de como afrontar cosas en Torque es una guía de referencia de su motor, por lo que os recomiendo que antes que comprar este libro comenceis con el anterior.

C++: Esto no es un libro, es un enlac, pero que mínimo que poneros una referencia a como podéis empezar con C++.

Deciros que todos estos libros han sido adquiridos en Amazon, aunque también se pueden adquirir en Agapea.

Sólo me queda mi recomendación de que si queréis afrontar un proyecto tan exigente como estos debéis de estudiar un montón y aquí tenéis un buen comienzo sólo para la parte de desarrollo.

El tema gráfico es otro tema con el que se deben pelear los diseñadores. 🙂

¡¡Feliz Año nuevo a todos!!

Motores de juego: Torque

Escrito por aserrano. Posteado en Desarrollo, Juegos, Motores 3D, Torque

Los chicos de GarageGames han desarrollado muchos productos entre los que se encuentran el Torque Game Engine y el Torque Engine Advanced. De su página web podréis bajar una demo de ambos motores de juego totalmente funcionales durante 30 días.

El segundo es una evolución del primero y practicamente igual con la salvedad de que nos permitirá efectos visuales de última generación.

Una de las cosas que hace más diferente a Torque de otros motores de juego es su curva de aprendizaje. En muy poco tiempo podéis empezar a crear vuestros propios juegos.

Torque Demo FPS

Como yo podéis intuir este motor no es gratis pero realmente el precio de la licencia “Indie” merece la pena, más ahora que tenemos un Euro tan potente :). Quiero recordar que son unos 150$ (100€ más o menos a la fecha de este artículo).

Como indicaba por muy poco dinero tendréis un motor plenamente funcional y además una vez adquirido el producto se suministra con el código fuente en C++ que con los adecuados niveles avanzados podréis modificar a vuestra conveniencia. De todas formas el producto es totalmente funcional sin tener ni siquiera un compilador de C++, ya que viene compilado una vez adquirida la licencia.

Otra de las ventajas de este motor es que para la versión normal todo el producto es multiplataforma. Realmente es una pena que el motor avanzado haya perdido esa característica.

Torque se programa por misiones y si bien cada terreno es bastante amplio, es una de sus limitaciones el no poder crear terrenos tan grandes como queramos, siendo casi con toda probalidad, nuestro primer contacto con el editor de terrenos y creador del mundo.

El creador de terrenos nos permitirá incluir lagos, editar montañas, poner edificios, hacer cavernas, poner el punto de salida de nuestro héroe, etc.

Otra característica destacable es que todos los desarrollos creados tienen arquitectura cliente servidor incluso aunque los juegos sean para ejecutar solamente en local. Esta característica hace que cualquier juego pueda ser creado con facilidad para soportar muchos jugadores online.

Todo el producto se complementa con un editor de diálogos, exportadores para los principales programas gráficos, una gran documentación, foros de soporte, etc.

Resumiendo, torque es un producto muy recomendable si queremos empezar a desarrollar juegos con prontitud y con una curva de aprendizaje muy corta.

Si queréis ver las posibilidades reales de este motor echad un vistazo a este mmorpg minions of mirth

Garagegames

Motores 3D: Ogre3D

Escrito por aserrano. Posteado en Desarrollo, Motores 3D, Torque

Cualquier juego 3D que se precie debe tener un motor idem.

En el caso de Ogre, lo primero que deberíamos matizar es que no es un motor de juegos. Ogre sólo es un motor 3D y muy bueno por cierto. Viene además complementado con CEGUI y OIS.

Realmente estas dos librerías no forman parte del desarrollo de Ogre en sí, pero sus desarrolladores las han usado para poder complementar Ogre.

La primera es una archi-conocida ‘GUI’, es decir una interfaz gráfica de usuario que nos permitirá crear diálogos, cajas de edición de texto, cajas de lista, etc y la segunda es una librería de interfaz de usuario, es decir, nos permitirá manejar el teclado, ratón y joystick.

Destacable de este motor es su facilidad inicial de uso, aunque eso sí, se requiere un nivel medio-alto de C++. Mi recomendación por tanto al respecto es que si no tienes ese perfil, lo primero que debes hacer, es adquirir un conocimiento medio de C++ y sobre todo sentirte cómodo con herramientas de desarrollo C++ como visual C++ Express Edition.

Ogre se presenta en dos paquetes, un SDK, listo para desarrollar, muy recomendable para novatos, y otro en formato código fuente, mucho mas propio de usuarios avanzados y que nos permitirá, por ejemplo, depuración dentro del código de Ogre.

Los chicos de Ogre han realizado una tarea excelente y han querido hacer su herramienta universal y además de ser multiplataforma para Linux, Windows y Macintosh, compila bajo los compiladores C++ mas usados, Visual C++, MingW o gcc bajo linux (que me perdonen la gente de Mac porque desconozco el compilador que usan ellos 🙁 ).

Ogre se complementa además, con muchas herramientas de exportación de editores gráficos 3D como blender, 3D studio, Maya, etc. y un paquete de demos, que recomiendo bajar para que veamos las magníficas capacidades de este motor (también tenemos disponibles sus código fuentes que nos puede servir de aprendizaje).

Este engine también cuenta como caracterísitica el estar implementado a base de plugins, que lo hace ser muy versatil en ese sentido. Para la plataforma Windows tenemos dos motores de renderizado, uno para DirectX y otro para OpenGL y para Linux, logicamente, sólo contamos con soporte OpenGL.

Además de los plugins de renderizado, tenemos plugins de partículas o los plugins de escenario, y entre estos, los hay para interiores y exteriores (terrenos). Realmente podríamos hacer uso de cada uno de ellos en cualquier circunstancia, pero la razón de cada uno de ellos es su optimización que será mejor si se le da el uso apropiado.

Para la versión de desarrollo existe además un plugin de renderizado de portales del que haremos un artículo específico por su importancia, ya que aporta una de las características mas demandadas en un juego.

Ogre viene con una plantilla que hará un primer desarrollo inicial muy simple. No es el objeto de este artículo pero expondré la creación de una aplicación inicial en Ogre a modo de ejemplo.

[code lang=”cpp”]
#include “ExampleApplication.h”

class TutorialApplication : public ExampleApplication
{
protected:
public:
TutorialApplication()
{
}

~TutorialApplication()
{
}
protected:
void createScene(void)
{
mSceneMgr->setAmbientLight( ColourValue( 1, 1, 1 ) );

Entity *ent1 = mSceneMgr->createEntity(“Robot”, “robot.mesh” );

SceneNode *node1 = mSceneMgr->getRootSceneNode()->createChildSceneNode(

“RobotNode” );

node1->attachObject( ent1 );

}
};

#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
#define WIN32_LEAN_AND_MEAN
#include “windows.h”

INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT )
#else
int main(int argc, char **argv)
#endif
{
// Create application object
TutorialApplication app;

try {
app.go();
} catch( Exception& e ) {
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
MessageBox( NULL, e.getFullDescription().c_str(),

“An exception has occurred!”, MB_OK | MB_ICONERROR | MB_TASKMODAL);
#else
fprintf(stderr, “An exception has occurred: %sn”,
e.getFullDescription().c_str());
#endif
}

return 0;
}
[/code]

Este código hereda la clase ExampleApplication que monta todo el esqueleto para poder usar Ogre y se encarga de toda la inicialización de recursos y plugins de la misma.

Destacable de todo este código es la fase de creación de nuestra escena. Creamos una luz, una entidad, la vinculamos a un nodo de nueva creación, que estará en la posición vectorial (0,0,0) y finalmente el nuevo nodo es añadido a la escena.

[code lang=”cpp”]

void createScene(void)
{
mSceneMgr->setAmbientLight( ColourValue( 1, 1, 1 ) );

Entity *ent1 = mSceneMgr->createEntity(“Robot”, “robot.mesh” );

SceneNode *node1 = mSceneMgr->getRootSceneNode()->createChildSceneNode(

“RobotNode” );

node1->attachObject( ent1 );

}

[/code]

A partir de aquí todo este esqueleto montará el bucle y el manejo de la interfaz de usuario y nos permitirá ver dicho “mesh” en pantalla.

He querido dar con este artículo un esbozo inicial de lo que es Ogre y una min-aplicación para que se vea su sencillez inicial de uso.

Mucho mas allá de esto, el código lo podríamos complicar todo lo que quisieramos y si queremos salir de una inicialización básica, deberemos crear nuestro propio bucle de juego y nuestra propia inicialización. Es posible que veamos algo de eso en otro artículo.

Próximo artículo Ogre 1.5.0: motor de renderizado PCZSceneManager.

Referencias:

El código fuente aquí expuesto pertenece a la wiki de Ogre y es de dominio público (salvo error u omisión eso es lo que pone al pie de su página)

Ogre3D Web oficial
Ogre3D Wiki

Nota legal

(C) Antonio Serrano 2012