Novedades del Blog

martes, 23 de diciembre de 2008

Yo de mayor quiero hacer algo asi...

Estos dias ademas de intentar implementar unas buenas colisiones, no he podido resistirme a la tentacion de jugar al nuevo Prince of Persia de Xbox360.
Despues de jugar unas horitas e conseguido acabarlo, y como era de esperar, me parece IM-PRE-SIO-NAN-TE!!!! cada nuevo juego del principe supera con creces el anterior. Los efectos de luces y sombras y sobre todo el efecto cuando se sana la tierra es increible.

Quiero felicitar desde aqui a los genios que han sido responsables de semejante maravilla.

viernes, 12 de diciembre de 2008

Bounding Box visible

Esta semana me lo he tomado un poco mas de relax y he implementado que el Bounding Box sea visible en las entidades, es un primer paso para meterme con las colisiones, así podre depurar mejor si de verdad las entidades colisionan bien o no.
También me ha venido bien para desintoxicarme del Shadow Mapping que todavía me sigue provocando pesadillas jejeje...

Además he estado retocando algunas cositas mas dejándolas un poco mas limpias y genéricas posibles, nunca se sabe cuando voy a necesitar un motor 3d para hacer juegos en isométrica jejeje..

lunes, 8 de diciembre de 2008

Primera batalla perdida :( ...

Pasado mañana hará 3 meses que empecé con el Shadow Mapping, durante este tiempo me he estado pegando con ello en innumerables ocasiones y al final ha podido conmigo.
De momento, voy a dejar aparcado el Shadow Mapping y voy a continuar con las demás tareas del juego, ya volveré a abordar este reto cuando tenga mas conocimientos y mas documentación.
Voy a intentar ir avanzando otras tareas y a coger un poquito mas de fuerzas, que este maldito Shader , ha acabado con toda la que tenia y se ha llevado con ella mi paciencia. Como he dicho antes he perdido una batalla pero no la guerra, y el show debe continuar.... con o sin Shaders :)...

Por supuesto, si alguno sabéis de algún libro, web o conocimientos propios al respecto del Shadow Mapping, no dudéis en poneros en contacto conmigo, toda ayuda sera bienvenida. Muchas gracias de antemano.

jueves, 4 de diciembre de 2008

El orden de las entidades....

...altera las sombras. He probado a pintar las entidades en orden diferente, es decir, empiezo pintando las entidades mas alejadas de la luz hasta las mas cercanas y he conseguido que se vea bien. El problema consiste en que en entidades que se mueven, este orden cambia dinamicamente. Esto ocurre porque el Shadow Mapping se va generando a medida que se van pintando las entidades.

Por ejemplo, si batman esta a la altura del suelo la primera plataforma se pintaría antes que batman ya que este es mas alto y la segunda después porque esta a la misma o mayor altura. Pero cuando batman se sube a la primera plataforma se tendría que pintar primero la plataforma 1, luego la segunda y al final batman porque subido en la primera es mas alto que la segunda plataforma. En la imagen se puede ver un poco el ejemplo.


Las soluciones que se me han ocurrido han sido 2:
1º Controlar que entidades tienen movimiento y cada vez que se vaya ha hacer un pintado mirar la coordenada 'y' de la entidad para pintarla antes o después de otra. Esta solución es un poco problematica, porque tener que estar preguntando a cada entidad si esta por encima o por debajo de otra con movimiento, seguramente influya negativamente en el framerate.
2º Pintar toda la escena y generar el Shadow Mapping a posteriori con todos los objetos ya en el mundo, en vez de ir generándolo a la vez que se van pintando en el buffer. Esta es la solución mas óptima, pero todavía no se como obtener el Shadow Mapping a posteriori.

Si alguno de los pocos lectores del foro tiene alguna sugerencia por favor no dudéis en poner un comentario, os lo agradeceré eternamente :)

martes, 2 de diciembre de 2008

Pintaba demasiado bonito.... :(

Pues eso mismo, parecía que el ShadowMapping estaba controlado pero no, he encontrado una cosa que no me ha gustado. Cuando una entidad pasa por debajo de otra la sombra que debería ser igual o mas oscura, pues es mas clara... un ejemplo:



Como podéis ver en la textura ShadowMapping la parte de batman que se supone esta debajo de la plataforma esta mas clara que la plataforma:
Aquí os pongo la parte donde se ve ese efecto raro ampliado para que se vea mas claro, como la mitad de batman que esta debajo de la plataforma tiene la sombra clara y la otra mitad tiene la sombra oscura:



Pues nada, seguire rompiendome los cuernos con el Shadow Mapping a ver si soy capaz, de una vez ,de dejarlo un poco fino, porque me esta costando mas que la obra del Escorial.

miércoles, 26 de noviembre de 2008

Shadow Mapping is OK!!!!!



Después de mas de 2 meses de curro y de pegarme con el motor una y otra vez, ya he conseguido implementar el Shadow Mapping de una vez, ha sido una tarea dura pero ha merecido la pena.
Durante este tiempo además he aprovechado a hacer algunos cambios en los ficheros de configuración permitiendo que se pueda elegir la posición que ocupara la cámara y tres luces en cada habitación, además de otros parámetros independientes en cada luz, de momento no he hecho muchas pruebas pero el resultado es bastante majo.
Lo malo de todo esto es la considerable caída del framerate que se queda en unos 30 frs/seg, un poco justo para mi gusto, de todas maneras probare en distintas maquinas a ver que tal resultado, aun así, intentare optimizar al máximo.

Aquí pongo un vídeo para que se vea mejor el efecto de la sombra:

martes, 18 de noviembre de 2008

Resumen de Shaders

Llevo más de 2 meses desde que empece con los Shaders (exactamente el 10/09), pero en este tiempo de pegarme con los Shaders, el codigo ha cambiado infinidad de veces para intentar acoplar lo mejor posible estos Shaders y el codigo en C# con DirectX. Ahora mismo ya me funciona el agregar una luz con sus sombras con Shaders y estoy intentando hacer unos pequeños cambios en el codigo para poder usar por lo menos 3 luces a la vez en la escena.

Espero que para antes del tercer aniversario mensual :) esta parte de Luces y sombras con Shaders este acabada.

lunes, 10 de noviembre de 2008

Mas modificaciones...

Con las ultimas modificaciones que implemente, empece a ver pequeñas cosas que no me cuadraban mucho con lo que queria conseguir, asi que, lo que parecia un pequeño cambio se ha convertido en un gran cambio en la parte del juego. Cuando termine todas estas modificaciones pondre una nueva entrada intentando explicar un poco todos estos cambios.

Eso me esta llevando mucho tiempo, ademas de un factor externo llamado Gears of War 2 que lleva desde el viernes pasado atormentandome y no dejandome codificar tan rapido como me gustaria :D jejeje...

Tengo un gran conflicto interno :)

miércoles, 29 de octubre de 2008

Modificaciones en la estructura

Llevo unos dias reestructurando el codigo para implementar Shaders de la forma mas generica posible y que se me ocurre, como todavia no se el alcance de la potencia de estos, he intentado crear una estructura lo mas abierta posible.

La primera idea que se me ocurrio era crear una interface Effect con las cosas comunes que tienen todos los efectos (tecnica, nombre de fichero,etc...) y crear clases derivadas de esta para cada efecto a implementar.
Entonces descubri que para hacer el ShadowMapping hacia falta dos efectos, uno que crea la textura ShadowMap y otro efecto que usa esa textura para pintar la escena.
Asi que al final he implementado una clase Shader, la cual almacena los efectos necesarios para crear ese Shader.

Cuando llamo al metodo que pinta el mundo, este llama al metodo de pintado de la Habitacion, este a su vez llama al metodo de pintado de los Shaders que se van a aplicar a la escena, por cada Shader se llama al metodo de pintado de cada Efecto del Shader, por cada Efecto se llama al metodo de pintado de cada Entidad y este a su vez llama al metodo de pintado del Componente que indica si una entidad se pinta o no y al final se pintan las mallas... Jajaja, si ya se que esto es un lio por eso pongo la imagen a continuación que puede aclarar un poco las cosas:



Cualquier duda que tengais no dudeis en poner un comentario y os respondere lo mas rapidamente posible.

jueves, 23 de octubre de 2008

Un poquito de Shadow Mapping

Después de conseguir las luces empezamos ahora con las sombras y de momento parece que bastante bien, anoche acabe la implementación del código pero no estaba del todo bien, ajustando unos parámetros y cambiando algunas variables he conseguido que a priori se muestre la textura Shadow Mapping dinámica que se utilizara junto con las luces para crear un efecto de luz lo mas real posible.

Digamos que la parte mas clara del Shadow Mapping debería ser donde hay mas sombra, en esta imagen se simula que la luz esta mas o menos donde esta la cámara.

Ademas de esta implementación he descubierto un software que me permite tener un repositorio de los ficheros fuente y tener un mayor control de versiones, se llama Subversion, es bastante conocido pero yo nunca lo habia utilizado, ademas es libre.
Tiene una buena cantidad de funcionalidades para poder coordinar la programacion de varias personas con un mismo codigo fuente, pero la utilidad que mas utilizo, es la de crear un repositorio en mi pendrive, lo que me permite tener mi codigo fuente portatil y con control de versiones. Esta practica no es muy aconsejable pero como solo yo estoy tocando el codigo, no tiene porque ocurrir nada raro.

martes, 21 de octubre de 2008

¡¡Por finnnn!!!!

Si señor, por fin he sido capaz de encontrar el problema, y todo por no fijarme bien. Pensando, pensando y pensando por fin he visto la luz al final del camino (nunca mejor dicho jeje ). Al depurar se me ha ocurrido que las normales de las mallas no estaban del todo bien.
Mi primer pensamiento es que la malla estuviera mal exportada, cosa que era un poco complicada ya que no creo que el 3D Max falle en eso.
Y mi segunda opción era que el VertexBuffer que contiene los vértices de la malla no tuviera la información de la normal y efectivamente ese era el problema.
La solución, muy fácil y venia en el tuto de riemers, lo había visto pero no lo tome en consideración, grabe error:

m_pMesh = m_pMesh.Clone(m_pMesh.Options.Value, CustomVertex.PositionNormalTextured.Format, pD3DDevice);
m_pMesh.ComputeNormals();


Pues eso, hago un clon de la malla diciéndole que el bufer de vértices almacene la posición, la normal y las coordenadas de textura y después calculo las Normales y ¡viola! así queda la cosa.



Como podéis ver en la captura, en la pared del fondo, en la parte derecha de Batman y en algunos sitios mas, se puede apreciar que esta la textura mas oscura, y por el contrario en la parte que afecta a la luz se ve mas brillante. En esta captura, la luz se encuentra justo en las coordenadas de la cámara.

¡¡Dios!! que sensacion mas buena cuando te salen las cosas jejejeje :) y ahora a la cama que ya es hora y en seis horas otra vez en pie.

lunes, 20 de octubre de 2008

Sigo atascado con las luces...

Como podeis ver en el blog llevo mas de 20 dias atascado con el tema de agregar luces y sombras por shaders, bueno mas concretamente las luces solo de momento.
Debido a tener que utilizar Shader se me ha ocurrido cambiar un poco la estructura de clases de:

World.Draw
Rooms.Draw
Entities.Draw
Meshes.Draw(Entity)

a:
World.Draw
Rooms.Draw
Effects.Draw
Entities.Draw(Effect)
Meshes.Draw(Effect, Entity)


Asi consigo que el efecto que indique en el fichero de configuracion de la Room se aplique a todas y cada una de las entidades que apareceran en escena.

Además, he creado una clase EffectManager que se encargara de cargar los efectos indicados en el fichero de configuracion de Efectos y almacenarlos en un repositorio para que no se duplique la carga de estos en memoria.

Aun así y despues de esta nueva organización de clases, el Shader que me pinta la luz no lo hace del todo bien, podeis ver la web de referencia que estoy siguiendo:
Riemers

Ojala y me apareciera la escena como a él jejejeje...

viernes, 3 de octubre de 2008

Luces con Shaders

Ya he conseguido crear una luz con Shader pero el resultado no es lo que esperaba, ya que algunas zonas me desaparecen totalmente. Todavia no he conseguido entender del todo como funcionan estos Shaders pero aun asi he hecho una captura de pantalla para que podais apreciar esos fallos que os comento:

Como podeis ver en la imagen, la parte de atras de la puerta que esta mas cerca a nosotros ha desaparecido, las baldosas aparecen transparentes y algunas partes de la malla de Batman tambien han desaparecido (la parte de abajo de la capa, el cuello, etc...).

Creo que el fallo esta en que la posicion de la luz esta en coordenadas locales de cada malla y se aplica a cada malla mostrada en pantalla, tengo que conseguir aplicar la luz a nivel de habitacion en vez de a cada malla.

07/10/08:
Mis sospechas parecen erroneas, despues de mirar a fondo el Shader y multiplicar las coordenadas de la luz por la Matriz 'WorldViewProjection' para sacar la posicion de la luz en el mundo, la imagen parece que tampoco queda del todo bien.
Tengo que inventar algo para que pinte la posicion de la luz en pantalla y ver realmente lo que esta ocurriendo.
Pues nada a seguir intentandolo...

Resultado de la encuesta

Como resultado a la pregunta que puse hace un mes aproximadamente:

¿Que mejorarias del Batman original en este remake?

Los resultados son estos:

El 66% (o lo que es lo mismo 2 personas) dejaria el juego tal y como esta.
El otro 33% (1 persona) haria cambios que mejoraran la jugabilidad del tipo de movimiento de camaras, aspecto grafico u otras cosas.

Gracias por participar a las 2 personas que lo han hecho porque el tercero soy yo jejeje.
Agradeceria que pusierais un comentario para saber por lo menos quienes sois y daros las gracias personalmente, debeis ser las unicas personas que leen este blog :)

viernes, 26 de septiembre de 2008

Shader con Mallas

Despues de una semana un poco complicada y con poco tiempo para desarrollar ya he conseguido pintar mallas con Shaders, de momento he pintado una malla de un coche que he conseguido de ejemplo por ahi. Ahora continuare a ver si puedo empezar a aplicarle luces y sombras.

Como casi siempre aqui dejo una captura de la malla pintada con Shaders:


28/09/08: Ya funciona con la clase que gestiona que no se repitan los Shaders cargados en memoria, a partir de ahora seguiré avanzando en este mundillo de los Shaders :)

domingo, 21 de septiembre de 2008

...y el primer Pixel Shader

Pues si también he implementado mi primer Pixel Shader, tampoco hace nada del otro mundo ademas no he cogido ninguna captura de pantalla de como ha quedado.
Ahora mismo estoy integrando esta nueva funcionalidad en el motor que estoy creando, y ya de paso, aplicar Vertex Shader y Pixel Shader a las mallas cargadas.

De momento ya tengo un gestor de Effects, igual que para las mallas, los bitmaps, las texturas y las fuentes. Este gestor se encarga de almacenar en memoria los recursos y así evitar volver a cargar un recurso que ya ha sido cargado previamente con el consiguiente ahorro en la memoria. Evitando que haya recursos repetidos que puedan ralentizar la ejecución.

sábado, 13 de septiembre de 2008

Mi Primer Shader

Después de mucho pegarme con el código y de mucho mirar en webs, por fin he conseguido mostrar un triangulo usando Shaders.
El Shader es muy básico, solo tiene un Vertex Shader que coloca el triangulo en el mundo (aquí su código):

struct VertexToPixel
{
float4 Position :POSITION;
float4 Color :COLOR0;
};


float4x4 xViewProjection : WORLDVIEWPROJECTION;

VertexToPixel SimplestVertexShader (float4 inPos : POSITION, float4 inColor : COLOR0)

{

VertexToPixel Output = (VertexToPixel)0;

Output.Position = mul(inPos, xViewProjection);
Output.Color= inColor;


return Output;
}


technique Simplest
{
pass Pass0

{

VertexShader = compile vs_1_1 SimplestVertexShader();

PixelShader = NULL;

}

}



El único pero, es que debo hacer algo en el código que hace que cuanto mas tiempo se esta ejecutando mas baja el framerate, es algo del Shader porque cuando utilizo el Fixed Pipeline de Directx sin el Shader no me ocurre este decremento de Framerate.
Aqui pongo una imagen con el ejemplo, el triangulo de la derecha se crea con el Fixed Pipeline de DirectX y el de la izquierda con el Shader arriba publicado.


14/09/08:
Ya he encontrado el problema, era la carga e inicializacion del Effect que se hacia en cada ciclo, simplemente lo he puesto en la inicialización y ya se ha solucionado, ademas gracias a los Shaders he visto que hay un pequeño incremento del Framerate frente a usar el Fixed Pipeline.

El siguiente paso sera el Pixel Shader.

miércoles, 10 de septiembre de 2008

Luces y Sombras con Shaders

Viendo que el resultado de las luces de DirectX es un poco pobre, ya que no implementa sombras, he decidido intentar utilizar Shaders para que las luces en la escena sean mas reales. De momento solo he creado un Vertex Shader muy simple para intentar utilizarlo en el juego, pero al ejecutar el DrawPrimitive me da un error un poco raro.

Depurando el codigo he podido encontrar que en una propiedad del objeto Effect aparecia una posible Excepcion que en estos momentos estoy analizando.
La propiedad es StateManager y despues de cargar el efecto con Effect.FromFile(), me aparece este literal en la propiedad :

'm_eEffect.StateManager' threw an exception of type 'System.NullReferenceException'

Intentare averiguar porque aparece y como se corrige.

jueves, 28 de agosto de 2008

Framerate 'constante'

He conseguido establecer mas o menos un framerate constante, pero al usar tipo entero en vez de con coma flotante, cuando se establecen framerate menores de 40 sigue manteniendose constante pero con un framerate mayor.
Ejem: pongo el framerate de 20 y en realidad se establece a 30.
Creo que esto ocurre porque al usar enteros, se pierde la parte decimal, que es la que debe dar el ajuste completo al framerate indicado.

Aun así, intentare que el framerate no baje de 50 para mantener una buena fluidez durante el juego, cuando pueda implementar animaciones con los modelos definitivos volvere a realizar estas pruebas para conseguir el framerate mas optimo.

lunes, 25 de agosto de 2008

Vuelta de Vacaciones

Bueno pues ya estoy de vuelta de mis vacaciones y es hora de continuar con el desarrollo. Voy a intentar optimizar un poco más el tema de las animaciones porque cuando intento mostrar una animacion en un fichero .x que no tiene informacion de Skin me lo muestra deformado y sin animación.

Tambien me gustaria concretar un poco como van a crearse los niveles, pero esto es algo que tengo que ponerme de acuerdo con David que es quien esta llevando todo el tema de las 3D.

De momento nada mas que volver al trabajo :)

martes, 12 de agosto de 2008

Vacaciones por fin!!!!!!

Pues si, a las 18:30 exactamente comienzan mis tan ansiadas vacaciones, asi que no creo que haga nada nuevo en lo que queda de semana, ni la que viene. Volveré al trabajo y al continuare con el desarrollo por las tardes del proyecto a partir del dia 25 de Agosto, son pocas vacaciones pero menos es nada.

Saldando cuentas con la animacion

La animación fue una de las cosas que me quedo pendiente cuando hice la primera beta de batman3D en C++, por eso ha sido una de las primeras cosas que queria implementar en esta nueva versión en C#. De momento solo consigo mostrar la animación de la malla que viene de ejemplo con DirectX pero ya es un avance. Todavia me falta controlar que una malla animada en formato .X venga con mas de una animación y controlar dinamicamente la velocidad de reproduccion de la animación que ahora esta fijada por una constante, cosa que no es aconsejable porque depende de en que maquina se esta ejecutando para ir mas deprisa o mas despacio.
Aqui dejo un pequeño video con lo que he conseguido hasta ahora, como la malla 'tiny.x' de DirectX es bastante mas grande que las que tengo para el juego he mostrado solo esta.

1. Primero he conseguido reproducir la malla que tiene una animacion:



2. Tambien he conseguido reproducir la misma malla pero esta vez con 4 animaciones distintas:


miércoles, 6 de agosto de 2008

Camaras, LUCES... y acción

Ya tengo integrado en el codigo el tema de las luces DirectX, no son muy reales porque atraviesan mallas y no hacen sombras pero para salir del paso no estan mal. Cuando este el proyecto algo mas avanzado me planteare la opción de implementar luces con Shaders, pero de momento esto es suficiente.

Los tipos de luces que he implementado son:
1. Spot Light: digamos que simula como si la luz saliera de un foco. La pequeña cruz gris es donde esta posicionada la luz y el eje amarillo de esta cruz indica hacia donde apunta la luz.


2. Point Light: un punto que emite luz en todas las direcciones, como si fuese el sol o una estrella. Se ve una pequeña cruz gris con un lado amarillo indicando hacia donde apunta la luz.



3. Direcctional Light: La luz viene en una direccion determinada, en el video viene desde arriba como una luz divina jejeje..



En los videos se puede apreciar un poco el funcionamiento de estas luces, a medida que vaya descubriendo como mejorarlo lo ire publicando.
En ToyMaker explican mejor como funcionan estas luces.

martes, 5 de agosto de 2008

Hagase la luz del reves

He conseguido hacer unas primeras pruebas estableciendo luces aunque me ocurre algo curioso, se ve luz donde deberia estar oscuro y oscuro donde deberia verse luz.
En la imagen la luz esta posicionada justo detras de la pared a la izquierda de Batman, en el mundo real todo lo que esta con luz aqui deberia estar oscuro y lo oscuro con luz.

No se si esto es normal con las luces de DirectX o es que he cambiado algun parametro que hace el efecto contrario, intentare buscar algun ejemplo de luces y ver que hago mal.

miércoles, 30 de julio de 2008

Primer video

En este primer vídeo solo se ve el movimiento de la cámara, tanto en vista con perspectiva, como en vista isometrica, en este vídeo se puede apreciar el back-face culling cuando la cámara gira hacia un lado que tiene pared y esta desaparece cuando da la espalda a la cámara, así una pared nunca estorbará la visión de la habitación.

martes, 29 de julio de 2008

Vista Isometrica

Mas cositas nuevas, ya tengo habilitada la vista Isometrica y el mostrar mensajes de Debug por pantalla, este sistema es un poco simple pero para mis necesidades, de momento, me sirve perfectamente.
Para conseguir esta vista Isometrica u Ortogonal he hecho una llamada a esta función, ademas de algunos cositas mas, pero basicamente esto es lo mas importante. Esta funcion lo que hace es crear la Matriz de Projeccion adecuada para generar este tipo de vista Ortogonal:

m_matProj = Matrix.OrthoLH(fWidth, fHeight, fNear, fFar);


lunes, 28 de julio de 2008

Implementación de Fuentes


Despues de unos pequeños problemas en el rendimiento, provocados por un pequeño fallo en la logica de la clase FontD3D ;P ya he conseguido mostrar el texto que yo quiera en pantalla. En este remake no se usa apenas texto, con lo que he hecho unas clases muy basicas para su manejo y lo utilizare sobre todo para Debug y poder mostrar en pantalla y en tiempo real el framerate y cualquier otro valor que considere necesario.
Como podeis ver en la imagen y como no podia ser de otra forma, el correspondiente 'Hola Mundo' jejeje

lunes, 21 de julio de 2008

... ¡¡Arreglado!! (soy un novatoooo :))

Pues si, ya he conseguido dejar las lineas de las coordenadas quietas, el problema era el que parecia, y es como si se pintaran los ejes en el origen de la entidad, en vez de la del mundo y efectivamente era eso, no pasba las coordenas de los ejes por la matriz de mundo, es decir , poner estas líneas de codigo antes de pintar las lineas 3D:

Matrix matWorld = new Matrix(); //Matriz de mundo
matWorld = Matrix.Identity; //creo la matriz identidad

//Aplico la transformacion a las coordenadas del mundo
m_pD3DDevice.SetTransform(TransformType.World, matWorld);
m_pD3DDevice.SetTexture(0, null); //No aplico ninguna textura


Atascadisimo ...

Estoy teniendo un pequeño problema con la cámara y la posición donde se pintan las entidades. Explico la situación, Coloco la cámara en la posición (50,100,-500) y apunto a la posicion(0,0,0), entonces pinto los ejes de coordenadas y la entidad, me aparece perfectamente, y cuando muevo la camara por el eje z se ve perfectamente como se va acercando al pto(50,100,0) perfectamente como se muestra en la imagen.


El problema aparece cuando intento pintar la entidad en otra posicion que no sea la (0,0,0), el caso es que la entidad baja, pero los ejes de coordenadas tambien y no los he cambiado, solo cambio la posicion de pintado de la entidad de (0,0,0) a (0,400,0) y aparece asi.


El caso es que no se si es la cámara la que se mueve hacia arriba y la entidad no hace caso a ese cambio de coordenadas, o son los ejes de coordenadas los que se estan moviendo con la entidad.
Si a alguien se le ocurre una prueba o metodo de como puedo ver que esta pasando, poner un comentario aqui o mandar un correo a batman3d@data6.com.
Muchas Gracias.

martes, 15 de julio de 2008

El pintado de primitivas... tambien solucionado

Al intentar ubicarme en el mundo 3D intentaba pintar unas lineas desde el punto (0,0,0) de coordenadas, pero era incapaz de que se pintaran, pero como siempre investigando he encontrado como hacerlo en C#, estas lineas estan pintadas en la imagen de color verde, rojo y azul.
Tambien he podido arreglar el pintado de lineas 2D (de color gris debajo del rectangulo azul) y rectangulos en 2D (rectangulo azul) como se puede apreciar en la imagen, si lo quieres ver mas claro, pincha en la imagen y se vera mas grande.

Lo proximo que quiero implementar es una clase que pinte texto en pantalla.

domingo, 13 de julio de 2008

Problemas en la carga de Texturas ... Solucionado

Después de conseguir pintar las baldosas del suelo, empezaron a aparecer los problemas:
1. La forma de la habitación no era como debería ser.
2. La carga de las texturas era lentísima.

Después de solucionar el tema de pintar bien el suelo de la habitación que era debido a un pequeño fallo en el bucle que pinta cada una de las baldosas del suelo, apareció otro fallo que me hizo temblar las piernas, la función que carga las texturas de los modelos tardaban 2 segundos y pico por textura usando este método:

Esta llamada tardaba 2 segundos y pico
m_pTexture = new Texture(pD3DDevice, pBitmap, Usage.Dynamic, Pool.Default);


La solución me la dio el Sr Google y la Sra MSDN, me mostraron un objeto de DirectX que me ha hecho ver la luz, TextureLoader.
m_pTexture = TextureLoader.FromFile(pD3DDevice, sPath);

miércoles, 9 de julio de 2008

Primeras imágenes



Por fin he conseguido mostrar algo en pantalla, de momento estoy usando los modelos que tenia de la anterior versión, parece que la migración del código esta cada vez mas cerca, estos dias seguire trabajando con el motor pero ahora si que puedo ver los resultados ;)
No se ve muy bien porque la camara esta descolocada y un poco lejos pero es un comienzo.

martes, 1 de julio de 2008

Ver para creer...

Ya tengo acabado el motor mas o menos, solo faltaba probarlo, y sorpresa, cuando ejecuto el codigo solo se ve la ventana con la pantalla negra, entonces empiezan los sudores frios y el pensamiento de que he estado perdiendo el tiempo... Y de repente..., ¿como se va a ver nada sino he creado ninguna camara para que apunte a la escena?. Error de novato, asi que ayer me puse a implementar la Camara con su correspondiente Interface para controlar todo lo que se va a mostrar.

A ver si entre hoy y mañana puedo mostrar alguna captura del juego con los modelos antiguos.

lunes, 30 de junio de 2008

¡¡ CAMPEOOOONES OE, OE, OEEEEEEE!!!!


Ya se que no tiene mucho que ver con el tema del Blog, pero no me puedo resistir el ponerlo, aunque solo sea para decir que ayer, como comprendereis, no hice ni una linea de codigo :D
En dias como el de ayer Batman se sentiria orgulloso de ser Español, jejejeje....
¡¡CAMPEOOOOOONES, CAMPEOOOOONES, OOOEEE, OOOEEE, OOOEEEEEEEEEOOO !!!

lunes, 23 de junio de 2008

Pequeño paron por causa de fuerza mayor


Pues si, he parado unos días el desarrollo de Batman debido a que he sido uno de los afortunados ganadores de una PS3 en mi curro, y junto a mi antigua PS2 con el Guitar Hero y mi XBOX360 recientemente adquirida, la tentación era demasiado grande como para no hacer uso de estas maquinitas :))) Jeje, eso si, custodiadas todas ellas por Batman y Robin.

Pero como toda fiebre se pasa, despues de pegarme unas buenas horas de vicio, ya he vuelto a la normalidad y al desarrollo de Batman jejeje...

Aun asi he avanzado algo el motor, y ya he implementado la clase World, Room y Entity, asi que ya queda menos para poder ver algo.

Como muestra del "Play Center" que me he montado en casa aquí tenéis una fotito, ahora solo me falta una Tele de 42' Full HD y ya no habra nada que me saque de la habitación.

lunes, 16 de junio de 2008

Nucleo del Engine

El nucleo del Engine esta casi migrado, a priori, parecia una tarea facil pero se ha ido complicando, aun así creo que vamos por el buen camino. Las clases RenderContext y RenderDevice estan migradas a falta de probarlas, la clase RenderManager esta en proceso, ya que solo esta migrado el Bitmap, espero poder acabar los demas en breve.

Uno de los cambios más dificiles que he encontrado ha sido a la hora del pintado, cuando se crean los vertices, ya que en C# se utiliza un objeto llamado GraphicsStream, este se encarga de ir almacenando los vertices del objeto a pintar mediante su método Write() .

Pongo un pequeño ejemplo, es una parte del método Draw() del pintado de un Bitmap, seguro que hay mas maneras de implementarlo pero esta es la que me parece mas optima, cuando haga las pruebas vere que tal funciona :)

Pongo el antes en C++ ...:

m_pVertexBuffer->Lock( 0, SIZE_VERTEX_BUFFER_REQUERIDO, ( void**) &pVertices, 0 );
//Y ahora creamos un vertice ...
pVertices->x = x;
pVertices->y = y;
pVertices->z = z;
pVertices->w = rhw;
pVertices->u = u;
pVertices->v = v;
pVertices++;
... // Asi todos los vertices que te hagan falta
m_pVertexBuffer.Unlock();

Y el despues en C#:

GraphicsStream data = m_pVertexBuffer.Lock(0,0, LockFlags.None);
//Y ahora creamos un vertice ...
data.Write(new CustomVertex.TransformedTextured(x,y,z,rhw,u,v));
... // Asi todos los vertices que te hagan falta
m_pVertexBuffer.Unlock();

viernes, 13 de junio de 2008

Progreso del Proyecto

He agregado una nueva opcion al blog para ver el progreso del proyecto, intentare actualizarlo lo más posible y siempre que pueda, porque al ser una imagen tengo que andar retocandola, pero para que se vaya siguiendo mas o menos es suficiente.

lunes, 9 de junio de 2008

Buscaba un "Bernie" y he encontrado a "D-o-S"

Pues si, aunque parezca un juego de palabras no lo es, D-o-S ha decidido ayudarme en esta nueva ocasión.
Conocí a D-o-S a traves de su participacion en el remake de Alien 8 y quede impresionado con su trabajo, me puse en contacto con él, e intentara participar en lo que pueda.
Muchas gracias D-o-S.

Y como muestra un botón...

miércoles, 4 de junio de 2008

Buscando un "Bernie Drummond"

Bernie Drummond es la persona que ayudo a Jon Ritman con el aspecto gráfico del Batman original, por esa razón busco a mi "Bernie Drummond" particular, ya que mi anterior colaborador no puede ayudarme en esta ocasión, una lastima.
Los conocimientos que debe tener son de 3DMax u otras herramientas de 3D que sean capaces de generar ficheros con extension .x . Tambien debera tener conocimientos de animación para darle movimiento a los personajes.
Basicamente esto es lo que necesito para este proyecto, cualquier otro conocimiento extra, por supuesto, sera bienvenido :)

Los interesados podeis poneros en contacto conmigo en batman3d@data6.com o poniendo un comentario en esta entrada con vuestro e-mail, para ponerme en contacto con vosotros.

lunes, 2 de junio de 2008

Primeros pasos: Modulos del Proyecto

Esta es la estructura que hay más o menos hasta la fecha en C++, entre paréntesis esta lo que debe hacer y digo debe porque durante el desarrollo las cosas pueden cambiar. El texto en cursiva indica que es un nuevo modulo a implementar desde cero.

Engine Gráfico:
  • RenderContext (encargado del pintado).
  • RenderDevice (gestión del Device Gráfico).
  • RenderManager (gestión de los Recursos Gráficos).
    • Bitmaps (gestión de los bitmaps del juego).
    • Textures (gestión de las texturas del juego).
    • StaticMesh (gestión de las mayas que no tienen animación).
    • AnimatedMesh (gestión de las mayas que tienen animación).
    • Cameras (gestión de las cámaras del juego).
    • ParticleSystem (sistema de partículas del juego).
Game:
  • Globals (contienen los objetos mas usados para tenerlos siempre a mano).
  • Interface (controla como se va a visualizar el juego).
    • InterfaceReal (muestra el juego con perspectiva real).
    • InterfaceIsometrica (muestra el juego en isometrica).
  • MenuManager (manejara los menus y sus opciones).
    • Menu (definición de un menu generico).
      • MenuPrincipal (Manejo del menu principal).
      • MenuGameOver (Manejo del menu game over).
      • MenuPause (Manejo del menu pause).
        • Controls (definición de un control para el menu).
          • ControlButton (maneja los botones de los menús).
          • ControlText (maneja las cajas de texto de los menús).
  • World (gestiona los objetos que van a aparecer en nuestro mundo del juego).
    • Room (gestiona los objetos de cada una de las habitaciones del juego).
      • EntityManager (gestiona las Entidades que aparecen en nuestro juego).
        • Entity (objeto que aparecera en el juego).
          • ComponentDamage (dotara a la entidad de la capacidad de sufrir daño).
          • ComponentGet (dotara a la entidad de la capacidad de coger items).
          • ComponentIANPC (dotara a la entidad de Inteligencia Artificial).
          • ComponentItem (dotara a la entidad de la capacidad de almacenar items).
          • ComponentKill (dotara a la entidad de la capacidad de infringir daño).
          • ComponentNavigation (dotara a la entidad de la capacidad de moverse).
          • ComponentNavigationRails (dotara a la entidad de la capacidad de moverse por un recorrido establecido).
          • ComponentPortal (dotara a la entidad de la capacidad de ir de una habitación a otra).
          • ComponentVisualization (dotara a la entidad de la capacidad de ser visible).
        • DefEntity (definicion de objetos que aparecen en el juego).
          • DefComponentDamage (definición de la capacidad de sufrir daño).
          • DefComponentGet (definición de la capacidad de coger items).
          • DefComponentIANPC (definición de Inteligencia Artificial).
          • DefComponentItem (definición de la capacidad de almacenar items).
          • DefComponentKill (definición de la capacidad de infringir daño).
          • DefComponentNavigation (definición de la capacidad de moverse).
          • DefComponentNavigationRails (definición de la capacidad de moverse por un recorrido establecido).
          • DefComponentPortal (definición de la capacidad de ir de una habitación a otra).
          • DefComponentVisualization (definición de la capacidad de ser visible).
Este es en un esquema básico de los módulos que va a contener en un principio el juego, ahora solo falta hacerlo realidad :)

Y dale Perico al torno...

Pues si, vuelvo a intentarlo, a ver si esta vez es la buena, y consigo acabar este remake que empece hace ya mas de 1 año y que por dejadez y poco tiempo tuve que abandonar.
Ademas de fuerzas renovadas también voy a intentar hacer algunos cambios al respecto, del anterior versión de mi remake:
  1. Este ultimo año he empezado a utilizar C# en el trabajo lo que me ha permitido coger bastante soltura en este lenguaje. Intentare, si es posible, migrar el código de la anterior versión a este nuevo lenguaje. Por supuesto no abandono las DirectX que tantas satisfacciones me han dado.
  2. Aunque la apariencia gráfica de la anterior versión del remake me parece genial, no es el objetivo de un buen remake. A mi modo de entender, un remake debe ser lo mas fiel posible al original pero con mejoras gráficas, de sonido y de jugabilidad, cuanto menos. Y aunque el Batman estilizado y fortachón esta muy bien, a mi me gusta ese gordito que andaba a pasitos y que tantas horas de juego me ha dado :)
  3. La principal idea de este remake es crear un modo de juego lo mas similar posible al original y otro con nuevas funcionalidades (giros de camara, tipos de vistas, etc..) que aun están por definir. Para que estas funcionalidades puedan ser factibles necesito crear un entorno totalmente 3D.
De momento estoy con la migracion del código y pruebas de rendimiento, pero iré poniendo como va el proyecto en este blog para que podáis ir siguiendo su evolución.

Muchas Gracias y espero poder mostrar cosas lo antes posibles, mientras tanto podéis descargaros la primera beta que hice en batman3d.data6.com