Comunidad orientada al desarrollo de videojuegos

Cargar Modelos 3D en Wave Engine

PREPARADOS, LISTOS…

– Actualmente los modelos 3D pueden estar en formato de archivo Direct X (.X), Obj, 3DS, DAE (collada) y FBX. Existen exportadores gratis para la mayoría del software de modelado 3D: 3D Studio, Blender, etc.

– La totalidad de los modelos y texturas las proporcionamos nosotros. Puedes descargarlo aquí.

– Deberías tener un conocimiento básico del lenguaje de programación C#. Puedes encontrar mucha documentación sobre C# en internet.

OBJETIVO

Una vez que hayas seguido paso a paso las siguientes secciones, tendrás un juego en Wave Engine, el cual consiste en un escenario 3D con un dinosaurio, donde puedes navegar a través de una cámara libre. También aprenderás el uso básico del editor de Wave Engine, Para que exportes assets para tus propios juegos.

EXPORTANDO MODELOS Y TEXTURAS

Los modelos que necesitas para este tutorial te los proporcionamos (te los puedes descargar en la sección Preparados, Listos…), por ejemplo, el dinosaurio ha sido exportado usando Blender e incorporado con plug-in para el formato Direct X.

blenderscreenshot

Dentro de los assets descargados puedes encontrar la siguiente jerarquía:

Modelos

  • fern.X, un grupo de maleza
  • floor.X, el suelo con algunas piedras
  • velociraptor.X, el dinosaurio

Texturas

  • FernTexture.png, la textura de la maleza
  • floorNight.png, una hoja de sprites con iluminación pre calculada a través del suelo y las piedras
  • VelociraptorTexture3.png, una hoja de sprites para el modelo del dinosaurio

Ahora tenemos todos los assets, el siguiente paso es exportarlos al formato .wpk (Wave Package) que es el que maneja Wave Engine. Abrimos Wave Editor, puedes encontrarlos en el menú de Inicio.

waveeditorscreenshot

Antes de añadir los assets, debes crear un nuevo proyecto: File > New Project (o Ctrl+N). Te pedirá un nombre para el proyecto.

Una vez creado el proyecto, añade todos los assets haciendo click en Project > Add new ítem, o en el icono de arriba a la izquierda, debajo de la etiqueta de Project.

newwaveeditorscreenshot2

Deberías ver algo parecido a esto:

waveeditorscreenshot3

Al final sería exportar simplemente todos los assets, pero, en este caso todavía necesitamos hacer un pequeño cambio.

Debido a la forma en la que hemos exportado todos nuestros modelos, estos necesitan decirle a Wave Editor el orden de exportado. Podemos continuar sin hacer esto –puedes intentarlo- pero verás que todos los modelos tienen las normales al revés, produciendo fallos visuales. Para evitar esto, seleccionamos todos los assets .X y, en el panel de la derecha, habilitamos la propiedad SwapWindingOrder.

waveeditorscreenshot_ejemplo

Haz click en Project > Export –te sugiere guardar el proyecto. Encontraras todos los assets exportados a .wpk en la ruta Export\Default dentro de tu carpeta de proyecto de Wave Editor.

CREANDO UN NUEVO PROYECTO

Actualmente son soportados Visual Studio 2010 y 2012, pero también estamos trabajando con el apoyo de MonoDevelop. Abrimos Visual Studio y abrimos Archivo > Nuevo > Proyecto.

visualstudioscreenshot

Dentro de Visual C# > Wave Engine, seleccionamos Wave Engine Game Project, le damos un nombre y pulsamos OK. Con el código fuente que hay, si pulsamos F5 (Iniciar) puedes ver una ventana con un color azulado de fondo.

AÑADIENDO MODELOS Y TEXTURAS

Empezaremos añadiendo todos los assets que hemos exportado al juego. Dentro de la solución de Visual Studio, el primero de los dos proyectos (el que no tiene “Project” al final del nombre) es el encargado de iniciar el juego y también contiene los assets del juego. Simplemente arrastra los assets a la carpeta Content (también puedes hacerlo con click derecho > Add > Existing Item…, o Shift+Alt+A). Solo por organización, se aconseja separar los assets por tipos.

visualstudioscreenshot2

Aparte de añadirlos al proyecto, también necesitamos decirle a Visual Studio que los trate como contenido. Seleccionamos los 6 assets, click derecho encima > Properties. Un nuevo cuadro de dialogo aparece en la derecha. En Acción de compilación elegimos contenido, y por último en Copiar en el directorio de resultados elegimos copiar siempre.

visualstudioscreenshot3

Ahora el código. Dentro de Wave Engine la lógica de juego está situada en el otro proyecto, el segundo. La plantilla crea por def ecto MyScene.cs, la cual es donde “consumimos” nuestros assets. Todo el código fuente vivirá dentro de CreateScene().

Empezaremos por añadir la cámara. En este caso, usaremos una cámara libre, por defecto contiene una lógica que soporta movimiento (dependiendo del dispositivo, los controles serán por teclado, por toques en la pantalla, etc):

FreeCamera mainCamera = new FreeCamera("MainCamera", new Vector3(0, 50, 80), Vector3.Zero);
EntityManager.Add(mainCamera);
RenderManager.SetActiveCamera(mainCamera.Entity);

El siguiente paso es añadir entidades por cada uno de nuestros modelos 3D. Todos ellos comparten la misma estructura: una entidad que se diferencia en el modelo y en el material.

Entity velociraptor = new Entity("Velociraptor")
      .AddComponent(new Transform3D())
      .AddComponent(new BoxCollider())
      .AddComponent(new Model("Content/Models/velociraptor.wpk"))
      .AddComponent(new MaterialsMap(new BasicMaterial("Content/Textures/VelociraptorTexture3.wpk") { ReferenceAlpha = 0.5f }))
      .AddComponent(new ModelRenderer());

EntityManager.Add(velociraptor);
Entity floor = new Entity("Floor")
      .AddComponent(new Transform3D())
      .AddComponent(new BoxCollider())
      .AddComponent(new Model("Content/Models/floor.wpk"))
      .AddComponent(new MaterialsMap(new BasicMaterial("Content/Textures/floorNight.wpk")))
      .AddComponent(new ModelRenderer());

EntityManager.Add(floor);
Entity fern = new Entity("Fern")
      .AddComponent(new Transform3D() { Position = new Vector3(0, -8, 0) })
      .AddComponent(new BoxCollider())
      .AddComponent(new Model("Content/Models/fern.wpk"))
      .AddComponent(new MaterialsMap(new BasicMaterial("Content/Textures/FernTexture.wpk") { ReferenceAlpha = 0.5f } ))
     .AddComponent(new ModelRenderer());

EntityManager.Add(fern);

¡Hecho! Si iniciamos la solución tendremos toda la escena renderizada.

gamescreenshot

Dependiendo del dispositivo puedes interactuar de múltiples modos. En este caso en particular, una aplicación de Windows, puedes moverte pulsando las teclas W, A, S, D por toda la escena.

CÓDIGO FUENTE COMPLETO

Puedes descargarlo aquí.

FUENTES

Tutorial original en inglés: http://blog.waveengine.net

Para descargar Wave Engine: http://www.waveengine.net

Traducido por Carlos Sánchez López

, , , , ,

Leave a Reply