Friday, June 20, 2008

Demo de Iluminacion (I)

Aun no he podido dar los ajustes finales a la version de desarrollo del Revolution Engine. Pero mientras sale esa version os dejo aqui la primera demo de iluminacion. Es tan sencilla como podia ser, calcula la luminosidad por software para cada vertice. Es simplemente para que sepais que es en eso en lo que estoy trabajando ahora. Actualmente ya soporta calculos por Hard de luminosidad, pero eso no esta incluido en la demo porque asi es mas estable de momento. Espero que os guste, pronto actualizare con una nueva version acelerada.
Como siempre agradecer a frontier por sus pngu, usadas en esta demo, y a los creadores de libogc, sobre las que esta desarrollado todo el engine, y del homebrew channel, que me ha simplificado mucho la tarea de desarrollo. Tambien gracias a todos los que estais siguiendo este proyecto y que me apoyais en el.

Nota: La demo trae incluidas las texturas que necesita para funcionar. No estoy seguro de donde hay que colocarlas, yo las coloco en la raiz porque utilizo el ftp, pero creo que si colocas el dol dentro de una carpeta en App/ siempre tienen que estar en la misma carpeta que el .dol

Demo

Wednesday, June 18, 2008

Formato Interno

Bueno, como ultimamente no tengo tiempo por culpa de los examenes no estoy haciendo nada relevante con el engine, pero creo que mi falta de tiempo no deberia ser motivo suficiente para su paralizacion. Por esta razon he decidido fijar un pequeño estandard para que todos podais hacer vuestras contribuciones, ya que me consta que hay interesados en colaborar. Para empezar he decidido fijar un formato de modelos que use el engine internamente para mostrar modelos 3D. Asi podreis todos los que querais podreis colaborar creando vuestras propias funciones de creacion de modelos. Empecemos:
Por ahora el engine utiliza internamente para los modelos la siguiente estructura:

typedef struct REV_Mesh{
u16 NVerts;
u16 NFaces;
u16 NCoords;
u16 NNormals;
f32 * Vertices;
f32 * Coordenadas;
f32 * Normales;
u16 * Lista;
} MESH;


NVerts debe contener el numero de vertices que tiene el modelo.
NFaces el numero de Caras.
NCoords el numero de coordenadas UV para cargar texturas.
NNormals el numero de normals.
Simple, ¿no?
Vertices es un puntero a un Array de f32. Esta array debe estar alineada a 32b y contiene las coordenadas de los vertices en el espacio ordenadas como x, y, z.
Lo mismo sucede con Coordenadas (almacenadas como U,V) y los normales.
En cambio lista es un poco mas complicado. Al principio pensaba poner Display lists. Pero he decidido que para las primeras versiones del engine no es necesaria demasiada optimizacion en este sentido. Por tanto en vez de haceros crear displaylists (con el trabajo que ello conlleva), y para que os vallais familiarizando con el Revolution Engine, he implementado una pequeña variante de las display lists. En futuras versiones esto cambiara, pero me parece una buena forma de comenzar. Sin mas dilacion:
List debe apuntar a un Array (no tiene por que estar alineado) de u16. Estos U16 son los indices de los vertices que compondran el modelo. El numero de indices total debe ser multiplo de 9, y vendran dados en este orden: Cada grupo de nueve indices representan un triangulo del modelo final. Se dividen en tres grupos de 3 indices cada uno (cada grupo se corresponde con un vertice del triangulo, y deben aparecer en el sentido contrario a las agujas de un reloj analogico para que se muestren desde el frente y viceversa (por aquello del backface-culling). Dentro de cada grupo de 3 el orden sera:
Indice de Posicion, Indice de Normal, Indice de Coordenadas UV.

Con el fin de que podais probar vuestras funciones sacare dentro de unos dias (2 o 3) Una version Alfa de desarrollo del engine. Con esta version vosotros podreis crear vuestras propias funciones y probarlas, pero ya podeis empezar a crear funciones del tipo creacion de primitivas, cargadores de modelos, etc...

Tuesday, June 10, 2008

Muchos cubos

Pues por votacion popular he subido otra demo de cubos, esta vez en vez de uno se ven un buen monton de cubos (mas de 400, que fue lo que me pidieron jeje) Todos con textura desde la SD y toda la parafernalia. Además tambien me habian pedido que colgase el source para poder ir viendo como funciona, así que aqui lo pongo, para que veais que usar el engine sera sencillo (cuando salga xD):

/////////////////////////////////////////////////
//Este archivo forma parde del Revolution Engine.
//Coded by Technik
/////////////////////////////////////////////////
#include
#include
#include
#include
#include
#include
#include

#include "REV.h"

int main()
{
VIDEO_Init();
WPAD_Init();
REV_Init();

GXTexObj texObj1 = CargarTextura("plasma.png");
Object * auxiliar = NULL
u16 i,j;
f32 px= -105.0f, py = 0.0f;
MESH * cubitos;
cubitos = Cubo();
Root * mRoot = NewRoot();
for(j=0;j<20;j++)
{
px = -105.0f;
for(i=0;i<7;i++)
{
Auxiliar = NewObj(cubitos, Vtr3(px, py, -20.0), Vtr3(0.0, 0.0, 0.0), 4);
SetRotSpeed(Auxiliar, Vtr3(-1.0f, 1.0f, 0.0f);
AddObj(mRoot, Auxiliar);
px+=35.0f;
}
py-=60.0f;
}

while(1) {

WPAD_ScanPads();

if (WPAD_ButtonsDown(0) & WPAD_BUTTON_HOME) exit(0);

// do this before drawing
REV_Process(*mRoot);
}
}


No esta muy organizado, la verdad, se puede hacer mas bonito, pero es que lo he copiado directamente del programers notepad, y las cosas las voy poniendo segun las necesito. Comentadme que os parece, y si pensais que deberia cambiarle algo. Todos los comentarios son bienvenidos.


Muchoscubos


PD: Siento que no se vean los include, pero es que me da problemas el HTML

Monday, June 9, 2008

Estrenando el blog os cuelgo la primera demo con texturas. Para seguir con la tradicion es un cubito dando vueltas jejeje. Estamos un paso mas cerca de poder crear los primero juegos! Lo proximo que hare (ya mañana) sera empezar a cargar modelos 3ds. Cuando logre eso a lo mejor os publico la primera version del engine.

Demo del cubo
Iba yo a crear un blog y resulta que todas las url estaban cogidas con blogs en blanco...sospechoso...pero me da exactamente igual jaja sera por imaginacion y por nombres xD
En fin, que os he creado este blog para ir poniendo todo lo que haga nuevo en el engine. Esto no quiere decir que valla a dejar de usar el hilo de EOL, pero es que ya las demos son demasiado grandes para adjuntarlas, asi que aqui os las podre ir colgando mejor.