- nico_kpoSuper Saiyajin
Cantidad de envíos : 245
Edad : 28
Localización : Arg-Tuc-Mi KSA
Sanciones : N/A
PJ preferido del ESF : Cell
Nik En el ESF : nico_kpo o SSJ4
Reputación : -5
Score : -13
Fecha de inscripción : 04/08/2008
Un tutorial mas basico de Milkshape
Miér Ago 06, 2008 2:06 pm
Guia rapida para Dibujar y Mover un modelo 3D
Bienvenidos al primera guia de la serie programacion 3D. Es un pequeño abrevocas del extenso mundo de
programacion 3D espero sirva de guia. Es muy simple no tomara mas de unos minutos crear y compilar el codigo.
INTRODUCCION
A muchos lectores de esta pagina les interesa trabajar en 3D, pero hay un
gran inconveniente muchos de los tutoriales y guías en ingles disponibles se
basan en el manejo portando el código desde DirectX (MDX o C++ o incluso si se
tratara de OpenGL), es decir muestran como hacer triángulos, esto es completamente impractico en el
Mundo XNA. La razón es simple la idea detrás del XNA es el crear juegos de la
manera mas practica de la que dispongamos.
Crear triángulos tiene mucha valides si se quiere hacer un motor grafico 3D, pero si lo que se
quiere hacer es un juego se llegara a la frustración. Si bien este proceso es la base,
representa solo el 1% de todo el trabajo en un juego. Por este motivo no se
explicara como crear triángulos por que simplemente
no encaja con la filosofía de este sitio que es el crear juegos.
No esta demás dar algunas recomendaciones para antes de empezar la guía:
- La programación 3D es una de las mas complejas no solo por las matemáticas,
adicionando las habilidades de razonamiento necesarias para llevarla con éxito.
- Lo mejor seria tener habilidades de modelación 3D .
- Dominar el mundo 2D en XNA antes de continuar en 3D, o si no quedaran
perdidos o frustrados por no tener buenas bases.
Lo recomendable seria primero hacer un juego 2D
para familiarizarse con la programación en el Framework antes de saltar de
cabeza al 3D.
Cualquier juego en un futuro desarrollado partirá de modelos realizado en un
programa destinado a ese fin y en lo posible se minimizara la escritura de
vértices o caras y demás elementos del mundo 3D.
Recomiendo estos programas de edición y animación 3D:
- MilkShape 3D (Ingles)
Free (Exporta .X requiere Plug-ing)
- Blender(Ingles)
GNU (Exporta .X).
- MAYA Versión limitada de Estudio
(Español) (Exporta FBX)
ALGORITMO BÁSICO EN XNA
Esta es una breve guía mostrara como mostrar y mover un simple modelo 3D con
ayuda de XNA.
El algoritmo básico:
- Crear un modelo en algún programa de 3D que exporte en formato .X o
formato FBX.
- Importa modelos y las texturas a GSE.
- Declara variables del modelo
- Declarar la matrices.
- Iniciar Variables
- Cargar Modelo
- Actualizar
- Dibujar!
Para este tutorial prepare un pequeño modelo original de un Pez
Mariposa que en adelante lo llamare el Pez.
Descarga el Código Guía
Modelo3D [GameProyects
Link]
Partiremos desde el segundo punto.
Agregar el Modelo
La única forma de agregar un modelo es en tiempo de diseño y con el
Content Pipeline no se pueden cargar modelos desde un archivo en tiempo de
ejecución, a menos se compilen en XNB lo cual no es una tarea fácil
[Runtime model loading].
Con
el puntero encima del icono del proyecto En el Explorador de soluciones, presionas el botón
izquierdo, busca agregar un elemento existente...:
Selecciona en tipos de archivo: Todos Los Archivos.
XNA Recursos y proyectos 2.0
Buscas las el modelo y agregas la texturas. Este es el modelo y textura en
el codigo.
En otras palabras se agrega el modelo como cualquier otro elemento además se
deben agregar las texturas, estas pueden estar en cualquier directorio del
proyecto igual el entorno las creara cargara sin problemas (pero deben estar
dentro del GSE). La única limitación
encontrada es que las dimisiones de las texturas son potencias en
potencia de 2 para no tener inconvenientes.
Declarar las Variables
- Crear juegos en 3D involucra el uso de muchas matrices y vectores 3D.
- Para cada modelo podemos tener una o mas matrices asociadas.
- Puedes leer matemática 3D
Vectors and Matrices en GameDev.
Sin entrar en mas demora este es el código básico:
//Definicion del Modelo
Model Pez;
//Posicion del Pez y Rotacion
Vector3 PosicionPez
= Vector3.Zero;
float RotacionPez =
0.0f;
//Velocidad del Pez
Vector3 VelocidadPez
= Vector3.Zero;
//Posicion de la camara que esta asociada
con una matriz de vista
Vector3 Camara =
new
Vector3(0.0f, 50.0f,
200.0f);
//Calculo de la relación de aspecto de la
camara
XNA Recursos y proyectos 2.0
float AspectoRatio =
640.0f / 480.0f;
//Matriz de Proyeccion
Matrix
MatrizProyeccion;
//MAtriz de vista
Matrix MatrizVista;
En cuanto a la matriz de proyección y de Vista podría ser lo mejor tenerlas
precalculadas para no tener bajones de rendimiento.
Iniciar las Variables
Ahora en el Método Inizicialice de nuestro juego
asignamos las variables, con unos breves comentarios para no entrar en detalles
en esta guía:
//Creamos una matriz de proyeccion
//Apertura 45 grados
//Relacion de aspecto 640/480
//Distancia minima 1
//distancia maxima 10000
MatrizProyeccion = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45.0f),
AspectoRatio, 1.0f, 10000.0f);
//Creamos una matriz de vista
//Posicion de la camara, Vector de origen y apuntando hacia el eje Y
MatrizVista = Matrix.CreateLookAt(Camara,
Vector3.Zero,
Vector3.Up);
//Giramos un poco el modelo para que se
vea bien 90 grados sexagesimales
RotacionPez = MathHelper.ToRadians(90f);
Los comentarios son solo para guía no es necesario copiarlos.
Ahora cargamos el modelo en LoadGraphicsContent:
XNA Recursos y proyectos 2.0
Pez = content.Load<Model>("pez");
Dibujar
Dibujar es fácil sin escribir sombreadores, lo interesante a destacar es que
es bastante simple! en el método Draw del juego
// TODO: Add your drawing code here
//Dibujar el modelo
//Depende de la forma de elaborar el modelo
//este puede tener una o mas Mallas asociadas
//Hay que dibujar cada una
foreach (ModelMesh
mesh in Pez.Meshes)
{
//XNA esta orientado a Sombreadores
//No existe matrices asociadas a todo el entorno como DirectX
//Asi que cada malla se le debe asociar un sombreador
//Se usara el BasicEfect que es una coleccion de sombreadores
//emulan las características de DirecX 9
foreach (BasicEffect
effect in
mesh.Effects)
{
//Activar la luz por defecto
effect.EnableDefaultLighting();
//Calcular la matriz del mundo
effect.World = Matrix.CreateRotationZ(RotacionPez)
* mesh.ParentBone.Transform);
//Asignar la matriz de Vista
XNA Recursos y proyectos 2.0
effect.View = MatrizVista;
//Asignar la matriz de proyección
effect.Projection = MatrizProyeccion;
}
//Dibujar la Malla con los efectos
mesh.Draw();
}
Actualizar
Como vamos a mover el pez colocamos algo de código extra en el método
Update del juego después de las líneas que
actualizan las matrices del Modelo.
//Leer el teclado
KeyboardState
keyboardState = Keyboard.GetState();
if (keyboardState.IsKeyDown(Keys.Up))
{
VelocidadPez.Z = 1f;
}
if (keyboardState.IsKeyDown(Keys.Down))
{
VelocidadPez.Z = -1f;
}
if (keyboardState.IsKeyDown(Keys.Right))
{
VelocidadPez.X = 1f;
}
if (keyboardState.IsKeyDown(Keys.Left))
{
VelocidadPez.X = -1f;
}
if (keyboardState.IsKeyDown(Keys.Home))
XNA Recursos y proyectos 2.0
{
RotacionPez += MathHelper.ToRadians(1f);
}
if (keyboardState.IsKeyDown(Keys.End))
{
RotacionPez -= MathHelper.ToRadians(1f);
}
//Actualizar la velocidad del Pez
PosicionPez += VelocidadPez;
//Desacelerar el pez
VelocidadPez *= 0.91f;
Bien con eso termina esta mini-guía sobre Render en 3D usando XNA, futuros
tutoriales explicara mas detalles sobre programación 3D.
Presiona F5!
Ahora una foto de la versión de fichero que tiene unos plus muy simples por
favor no dejen de descargarlo
LO QUE FALTA
- Crear un objeto que automatice el trabajo.
- Trabajar con las cámaras.
QUIERO SABER MAS
- Videos en
http://msdn.microsoft.com/directx/xna/videos/ (ingles)
- Una guía en ingles de Michael Morton
XNA Recursos y proyectos 2.0
http://xna.animered.net Potenciado por Joomla! Generado: 8 March, 2008, 07:48
Content
Pipeline Mesh Rendering - XBOX 360 XNA Tutorial.(ingles)
- www.thehazymind.com (ingles) contiene
unos buenas líneas de código para trabajar en 3D en XNA
- Aplicando efectos HLSL a los modeles
Applying Custom Effects (ingles) en
xbox360homebrew.com
- www.riemers.net
(Ingles) Interesante conversión de MDX a XNA contiene muchos tutoriales sobre
triángulos, HLS y además. Con algunas algunas bases de la matemática matricial
necesaria para empezar en cualquier plataforma
- Como cargar modelos en tiempo de Ejecución en XNA mediante msbuilder
Runtime model loading.
- Tutorial en Español (Argentina)
http://my.opera.com/motorXna por
Angel Arcoraci
XNA Recursos y proyectos 2.0
Bienvenidos al primera guia de la serie programacion 3D. Es un pequeño abrevocas del extenso mundo de
programacion 3D espero sirva de guia. Es muy simple no tomara mas de unos minutos crear y compilar el codigo.
INTRODUCCION
A muchos lectores de esta pagina les interesa trabajar en 3D, pero hay un
gran inconveniente muchos de los tutoriales y guías en ingles disponibles se
basan en el manejo portando el código desde DirectX (MDX o C++ o incluso si se
tratara de OpenGL), es decir muestran como hacer triángulos, esto es completamente impractico en el
Mundo XNA. La razón es simple la idea detrás del XNA es el crear juegos de la
manera mas practica de la que dispongamos.
Crear triángulos tiene mucha valides si se quiere hacer un motor grafico 3D, pero si lo que se
quiere hacer es un juego se llegara a la frustración. Si bien este proceso es la base,
representa solo el 1% de todo el trabajo en un juego. Por este motivo no se
explicara como crear triángulos por que simplemente
no encaja con la filosofía de este sitio que es el crear juegos.
No esta demás dar algunas recomendaciones para antes de empezar la guía:
- La programación 3D es una de las mas complejas no solo por las matemáticas,
adicionando las habilidades de razonamiento necesarias para llevarla con éxito.
- Lo mejor seria tener habilidades de modelación 3D .
- Dominar el mundo 2D en XNA antes de continuar en 3D, o si no quedaran
perdidos o frustrados por no tener buenas bases.
Lo recomendable seria primero hacer un juego 2D
para familiarizarse con la programación en el Framework antes de saltar de
cabeza al 3D.
Cualquier juego en un futuro desarrollado partirá de modelos realizado en un
programa destinado a ese fin y en lo posible se minimizara la escritura de
vértices o caras y demás elementos del mundo 3D.
Recomiendo estos programas de edición y animación 3D:
- MilkShape 3D (Ingles)
Free (Exporta .X requiere Plug-ing)
- Blender(Ingles)
GNU (Exporta .X).
- MAYA Versión limitada de Estudio
(Español) (Exporta FBX)
ALGORITMO BÁSICO EN XNA
Esta es una breve guía mostrara como mostrar y mover un simple modelo 3D con
ayuda de XNA.
El algoritmo básico:
- Crear un modelo en algún programa de 3D que exporte en formato .X o
formato FBX.
- Importa modelos y las texturas a GSE.
- Declara variables del modelo
- Declarar la matrices.
- Iniciar Variables
- Cargar Modelo
- Actualizar
- Dibujar!
Para este tutorial prepare un pequeño modelo original de un Pez
Mariposa que en adelante lo llamare el Pez.
Descarga el Código Guía
Modelo3D [GameProyects
Link]
Partiremos desde el segundo punto.
Agregar el Modelo
La única forma de agregar un modelo es en tiempo de diseño y con el
Content Pipeline no se pueden cargar modelos desde un archivo en tiempo de
ejecución, a menos se compilen en XNB lo cual no es una tarea fácil
[Runtime model loading].
Con
el puntero encima del icono del proyecto En el Explorador de soluciones, presionas el botón
izquierdo, busca agregar un elemento existente...:
Selecciona en tipos de archivo: Todos Los Archivos.
XNA Recursos y proyectos 2.0
Buscas las el modelo y agregas la texturas. Este es el modelo y textura en
el codigo.
En otras palabras se agrega el modelo como cualquier otro elemento además se
deben agregar las texturas, estas pueden estar en cualquier directorio del
proyecto igual el entorno las creara cargara sin problemas (pero deben estar
dentro del GSE). La única limitación
encontrada es que las dimisiones de las texturas son potencias en
potencia de 2 para no tener inconvenientes.
Declarar las Variables
- Crear juegos en 3D involucra el uso de muchas matrices y vectores 3D.
- Para cada modelo podemos tener una o mas matrices asociadas.
- Puedes leer matemática 3D
Vectors and Matrices en GameDev.
Sin entrar en mas demora este es el código básico:
//Definicion del Modelo
Model Pez;
//Posicion del Pez y Rotacion
Vector3 PosicionPez
= Vector3.Zero;
float RotacionPez =
0.0f;
//Velocidad del Pez
Vector3 VelocidadPez
= Vector3.Zero;
//Posicion de la camara que esta asociada
con una matriz de vista
Vector3 Camara =
new
Vector3(0.0f, 50.0f,
200.0f);
//Calculo de la relación de aspecto de la
camara
XNA Recursos y proyectos 2.0
float AspectoRatio =
640.0f / 480.0f;
//Matriz de Proyeccion
Matrix
MatrizProyeccion;
//MAtriz de vista
Matrix MatrizVista;
En cuanto a la matriz de proyección y de Vista podría ser lo mejor tenerlas
precalculadas para no tener bajones de rendimiento.
Iniciar las Variables
Ahora en el Método Inizicialice de nuestro juego
asignamos las variables, con unos breves comentarios para no entrar en detalles
en esta guía:
//Creamos una matriz de proyeccion
//Apertura 45 grados
//Relacion de aspecto 640/480
//Distancia minima 1
//distancia maxima 10000
MatrizProyeccion = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45.0f),
AspectoRatio, 1.0f, 10000.0f);
//Creamos una matriz de vista
//Posicion de la camara, Vector de origen y apuntando hacia el eje Y
MatrizVista = Matrix.CreateLookAt(Camara,
Vector3.Zero,
Vector3.Up);
//Giramos un poco el modelo para que se
vea bien 90 grados sexagesimales
RotacionPez = MathHelper.ToRadians(90f);
Los comentarios son solo para guía no es necesario copiarlos.
Ahora cargamos el modelo en LoadGraphicsContent:
XNA Recursos y proyectos 2.0
Pez = content.Load<Model>("pez");
Dibujar
Dibujar es fácil sin escribir sombreadores, lo interesante a destacar es que
es bastante simple! en el método Draw del juego
// TODO: Add your drawing code here
//Dibujar el modelo
//Depende de la forma de elaborar el modelo
//este puede tener una o mas Mallas asociadas
//Hay que dibujar cada una
foreach (ModelMesh
mesh in Pez.Meshes)
{
//XNA esta orientado a Sombreadores
//No existe matrices asociadas a todo el entorno como DirectX
//Asi que cada malla se le debe asociar un sombreador
//Se usara el BasicEfect que es una coleccion de sombreadores
//emulan las características de DirecX 9
foreach (BasicEffect
effect in
mesh.Effects)
{
//Activar la luz por defecto
effect.EnableDefaultLighting();
//Calcular la matriz del mundo
effect.World = Matrix.CreateRotationZ(RotacionPez)
* mesh.ParentBone.Transform);
//Asignar la matriz de Vista
XNA Recursos y proyectos 2.0
effect.View = MatrizVista;
//Asignar la matriz de proyección
effect.Projection = MatrizProyeccion;
}
//Dibujar la Malla con los efectos
mesh.Draw();
}
Actualizar
Como vamos a mover el pez colocamos algo de código extra en el método
Update del juego después de las líneas que
actualizan las matrices del Modelo.
//Leer el teclado
KeyboardState
keyboardState = Keyboard.GetState();
if (keyboardState.IsKeyDown(Keys.Up))
{
VelocidadPez.Z = 1f;
}
if (keyboardState.IsKeyDown(Keys.Down))
{
VelocidadPez.Z = -1f;
}
if (keyboardState.IsKeyDown(Keys.Right))
{
VelocidadPez.X = 1f;
}
if (keyboardState.IsKeyDown(Keys.Left))
{
VelocidadPez.X = -1f;
}
if (keyboardState.IsKeyDown(Keys.Home))
XNA Recursos y proyectos 2.0
{
RotacionPez += MathHelper.ToRadians(1f);
}
if (keyboardState.IsKeyDown(Keys.End))
{
RotacionPez -= MathHelper.ToRadians(1f);
}
//Actualizar la velocidad del Pez
PosicionPez += VelocidadPez;
//Desacelerar el pez
VelocidadPez *= 0.91f;
Bien con eso termina esta mini-guía sobre Render en 3D usando XNA, futuros
tutoriales explicara mas detalles sobre programación 3D.
Presiona F5!
Ahora una foto de la versión de fichero que tiene unos plus muy simples por
favor no dejen de descargarlo
LO QUE FALTA
- Crear un objeto que automatice el trabajo.
- Trabajar con las cámaras.
QUIERO SABER MAS
- Videos en
http://msdn.microsoft.com/directx/xna/videos/ (ingles)
- Una guía en ingles de Michael Morton
XNA Recursos y proyectos 2.0
http://xna.animered.net Potenciado por Joomla! Generado: 8 March, 2008, 07:48
Content
Pipeline Mesh Rendering - XBOX 360 XNA Tutorial.(ingles)
- www.thehazymind.com (ingles) contiene
unos buenas líneas de código para trabajar en 3D en XNA
- Aplicando efectos HLSL a los modeles
Applying Custom Effects (ingles) en
xbox360homebrew.com
- www.riemers.net
(Ingles) Interesante conversión de MDX a XNA contiene muchos tutoriales sobre
triángulos, HLS y además. Con algunas algunas bases de la matemática matricial
necesaria para empezar en cualquier plataforma
- Como cargar modelos en tiempo de Ejecución en XNA mediante msbuilder
Runtime model loading.
- Tutorial en Español (Argentina)
http://my.opera.com/motorXna por
Angel Arcoraci
XNA Recursos y proyectos 2.0
Permisos de este foro:
No puedes responder a temas en este foro.