Últimas entradas »

Nos mudamos

Bueno ahora el blog quedara permanentemente en http://bzkgaming.blogspot.com/

desde ahi pueden colsultar el curso de XNA en 3D

Aspectos Básicos XNA

Sistemas de Coordenadas y Cámaras XNA

Dibujar un Modelo 3D en XNA

Mover un Objeto 3D en XNA parte 1

Mover un Objeto 3D en XNA parte 2

Introducir datos desde el Teclado y Raton

pero no quiero que los post unicos de esta ubicacion se pierdan asi que lo dejare libre.

saludos.

bzk Gaming

Hola bueno ahí que seguir con el tutorial y ahora vamos a ver cómo se pueden mover objetos en 3D. Seguiremos con el proyecto del los tutoriales anteriores “Mijuego3D”.

Lo primero que queremos que haga nuestro tanque es poder verlo en 360 grados y para esto haremos que rote sobre su eje Y. así pues agregaremos una variable de clase llamada tanRotacion de tipo flotante.

//rotacion del tanque

float tanRotacion = 0.0f;

Después en el método Update() incluiremos este código:

//aumentar rotacion

tanRotacion += 0.01f;

Esto ara que cada vez que se actualiza el juego se aumentara la rotación. Ahora solo falta que el método para dibujarlo pueda interpretar la rotación del modelo.

Quitaremos esta línea de código y la sustituiremos por lo siguiente

efecto.World = origen[malla.ParentBone.Index];//cambiar por

efecto.World =origen[malla.ParentBone.Index ]* Matrix.CreateRotationY(tanRotacion);

Y tendremos nuestro tanque rotando en nuestra pantalla si ejecutamos en este momento. Aquí tenemos que explicar el cambio más trascendente que hicimos que es el método de dibujo.

Recuerden que origen es como tenemos nuestro modelo en 3D sin ninguna deformación, este será la base para cualquier trasformación que queramos hacer al objeto, además eso lo multiplicamos con el método estático CrearRotacionenY (traducido al español) de Matrix el cual recibe un numero flotante que representan los radianes que quiere que se rote el objeto sobre su eje Y.

Si cambiamos la rotación obtendremos el mismo resultado, y solo cambiara la dirección de la rotación.

//disminuir rotacion

tanRotacion -= 0.01f;

Ahora queremos que nuestro tanque, pues nos proteja ¿no?, para eso si hicieron, para esto tiene que patrullar un área digamos un circulo en el cual de vueltas para ver si ahí enemigos.

Esto lo haremos de una forma muy sencilla, volveremos a cambiar el efecto del mundo con al siguiente línea:

efecto.World = origen[malla.ParentBone.Index] *Matrix.CreateTranslation(mPos)* Matrix.CreateRotationY(tanRotacion);

 

Esto lo que hace es que nuestro tanque primero se mueva y después de vuelta, algo así como si corriéramos en círculos en un árbol. Pero aparte de eso necesitamos que se desplace un poco hacia afuera del circulo imaginario, esta distancia será el radio de nuestro circulo.

Así que agregamos otra variable a nivel de clase que se llame radio de vigilancia

Vector3 radioVigia = new Vector3(0.0f, 0.0f, 200.0f);

Y en el método Initialize vamos a aumentar este radio a la posición del tanque para que el tanque toque el perímetro del círculo imaginario.

mPos+=radioVigia ;//toca el circulo imaginario

Ahora deberíamos tener algo como se muestra en el video. Pero el efecto no es muy bueno, no parece que el tanque este girando como lo haría un auto, siguiendo las llantas así que agregaremos algo más adelante.

Tutorial Dibujar un modelo 3D en XNA (Tutorial en bzkGaming)

Hola pues el inicio tan esperado de la creación de un videojuego está por comenzar para este tutorial necesitaremos nuestro modelo en 3D para la gente que no tenga forma de hacer un modelo en 3D Max, Blender, etc. Subo este que yo hice en blender en FBX, pues no es gran cosa no tiene textura solo color, pero es lo que necesitamos para empezar.

Los modelos que usa XNA pueden estar en formato .X o .FBX lo cuales podemos crearlo en algunos programas de diseño, este modelo lo hice en blender.

Ahora que ya han descargado el archivo deben añadirlo al proyecto para esto crearemos una carpeta en Content

Botón derecho en “Content”->Agregar->Nueva Carpeta y la nombraremos Modelos. Le damos clic derecho y le damos Agregar->Elemento existente… y elegimos el archivo tanquecito.fbx que descargamos antes.

Ahora abriremos el archivo Game1.cs y agregaremos una variable de nivel de clase o atributo llamado MiModelo de la Clase Model. La clase modelo pose métodos para poder manipular los modelos 3D que tengamos en nuestro juego. También necesitamos su posición en el espacio. Justo después de

public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;
        Model MiModelo;//nuevas lineas de codigo
  Vector3 mPos = new Vector3(0.0f);

Ahora necesitamos decirle donde esta el archivo que debe cargar, para esto vamos la funcion LoaContent y agregamos el siguiente codigo

MiModelo  = Content.Load<Model>("Modelos\\tanquecito");

Necesitamos algunas variables, que como se vio en el Tutorial Sistemas de Coordenadas y cámaras usaremos para mostrar nuestro modelo en pantalla, pondremos una cámara en el espacio, utilizaremos un vector3 para indicar la posición de esta, aunque aún no necesitamos que se mueva. También indicaremos la relación de aspecto que tendrá, para esto incluiremos el siguiente código como variables de clase en Game1 como hemos venido haciendo.

//camara en el espacion
        Vector3 camaraPos = new Vector3(500.0f, 100.0f, 1000.0f);
        //indica la relacion de aspecto
        float relacionAspecto;

Pero para obtener la relación de aspecto necesitaremos incluir  una llamada al dispositivo de gráficos la cual permita indicar la relación. Y para que no se esté ejecutando en cada ciclo, incluiremos está en el método LoadContent() de la siguiente forma

//esto genera un numero decimal equivalente a
            //dividir el ancho de la pantalla
            //entre el largo
           relacionAspecto= graphics.GraphicsDevice.Viewport.AspectRatio;

Ya casi acabamos solo nos falta incluir el método para dibujar nuestro modelo.

En esta ocasión usaremos la clase BasicEffect que contiene los métodos que necesitamos para dibujar un modelo 3D en el escenario.

Es nuestro método Draw()  justo después de los comentarios // TODO: Add your drawing code here. Anexaremos estas líneas de código.   

//toma como origen la estructura 3D que viene por default
            Matrix[] origen = new Matrix[MiModelo.Bones.Count];
            MiModelo.CopyAbsoluteBoneTransformsTo(origen);
            //los objetos 3D en ocasiones como esta estan formados por mallas
            //lo que se indica es que por cada malla que tiene este
            // se dibujara en la pantalla
            foreach (ModelMesh malla in MiModelo.Meshes)
            {
                //indica todos lo efectos basicos que pueden aplicarse a las mallas
                foreach (BasicEffect efecto in malla.Effects)
                {
                    //luz basica
                    efecto.EnableDefaultLighting();
                    //MUY IMPORTANTE
                    //indica que se dibujara ne la pantalla
                    // en esta ocasion sera el objeto tan como esta
                    efecto.World = origen[malla.ParentBone.Index];
                    //crea una vista para la camara
                    //en ella se define la poscion, el objetivo y el vector arriba
                    efecto.View = Matrix.CreateLookAt(camaraPos , Vector3.Zero, Vector3.Up);
                    //indica la proyeccion
                    //esta presente la relacion de aspecto
                    //y los limites cera y lejos para dibujar en la pantalla
                    efecto.Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(90.0f),
                        relacionAspecto, 100.0f, 10000.0f);
                }
                //Dibuja la malla en la pantalla
                malla.Draw();
            }

Pues eso es todo amigos. En el siguiente tutorial, indicare la forma de darle unas cuantas animaciones básicas a nuestro modelo en 3D.

Pueden checar el video en YouTube o descargar el archivo de proyecto que les anexo. No se olviden de comentar y de suscribirse si les gusto este tutorial. Nos vemos

Descarga el Proyecto pass: xna

Tutorial Sistemas de Coordenadas y cámaras en XNA

Hola bueno siguiendo con la introducción a la lógica de los juegos 3D necesitamos saber más de estos. En este post veremos el sistema de coordenadas que usa XNA y la importancia de las cámaras.

Antes de imaginarnos las coordenadas en 3D imaginemos en 2D, que tenemos, pues X y Y, donde podemos ubicar un punto en el espacio digamos en (0,0) o en (10,5) o en (-5,-3) etc. Pues bien ahora que tenemos ese concepto necesitamos saber que para manejar 3D necesitamos una coordenada más la cual es Z  la cual punta hacia nosotros en un esquema se verían así

XNA

XNA

Donde tenemos objetos tridimensionales y Z aumenta hacia nosotros y disminuye cuando se aleja.

Vectores

Para manejar posiciones en XNA usamos vectores, y si usaremos mucho las matemáticas y algo de física aquí, así que si has tomado clases de Calculo Vectorial o aun que sea has visto vectores te va servir mucho. Tendremos vectores de posición de velocidad, de aceleración, etc. Pero no se desanimen solo será lo más básico, como suma de vectores. Para usar vectores en XNA tendremos que usar la Clase Vector3, (si ya llevaste un curso de XNA en 2D veras que también hay Vector2).

El constructor de esta clase recibe, en el caso más común, tres parámetros 3 Flotantes que representan X, Y e Z respectivamente.

Cámara

La cámara es un objeto de vital importancia en el mundo 3D ya que con ella se muestra al usuario un vista 2D del mundo 3D, pero que significa esto. Significa que con la cámara “tomamos” un video del mundo el cual se representa en la pantalla de 2D .

XNA nos provee un método para poder visualizar en nuestra PC o Xbox lo que está capturando una cámara en un momento. El método se llama CreateLookAt que es un miembro estático de la clase Matrix (hablaremos más tarde de esta clase), los parámetros que recibe son: la posición de la cámara, el objetivo de la cámara, y la posición a la cual se requiere como arriba. Para estos tres parámetros utiliza Vectores, por ejemplo se puede enviar siempre el Vector3.Up (que representa un vector que siempre apunta al cielo) para decirle a la cámara donde es arriba.

Además contamos con un método estático para poder lograr perspectivas.

CreatePerspectiveFieldOfView este método recibe como parámetros: campo de visión, relación de aspecto, tope cercano y tope lejano.

camara XNA

camara XNA

Como indica la imagen la cámara necesita capturar los objetos en el mundo. Los topes cercano y lejano sirven para indicar que objetos si van a ser dibujados en la pantalla y cuáles no. Por ejemplo si pusiéramos como valores para tope cercano 100 y lejano 1000 solo los objetos que estén a esta distancia podrán ser mostrados, y si tenemos un objeto a una distancia de 1200 no será mostrado en la pantalla.

Bien ya ha sido mucha teoría para el siguiente post dibujaremos nuestro primer modelo en 3D.

Saludos y no se olviden de comentar.

 Tutorial Aspectos básicos en XNA

Hola, antes que nada debes de saber que los tutoriales que se verán en este blog se requiere de conocimientos previos en Programación, de preferencia el lenguaje C# (Aun que Java, C y C++ también es bueno) y en programación Orientada objetos ya que en la mayoría de los ejemplos se utilizaran Clases. Y por último haber jugado algunas vez en tu vida un juego de Video en 3D (No Mario, no eres tu soy yo, XD). Si cumples con estos requisitos ya puedes iniciar el tuto, sino búscate unos tutoriales simples de programación de preferencia en C# y dale una checada a la wiki http://es.wikipedia.org/wiki/Poo en su artículo de programación orientada a objetos. En este blog También planeo poner alguno que otro tutorial básico del lenguaje, nada que ver con la programación en XNA. Todo dicho.

En sus marcas… ¿listos?… fuera.

En este tutorial usare Visual Studio 2008 con XNA 3.0

Lo primero que debemos hacer es abrir el Visual Studio

Inicio->Programas->Microsoft Visual Studio 2008

Ahora que tenemos nuestra plataforma abierta debemos crear un nuevo proyecto

Archivo->Nuevo->Proyecto

Seleccionamos Visual C#-> XNA Game Studio 3.0 (en mi caso) y seleccionamos  Windows Game (3.0) y en nombre pondremos MiJuego3D en el la Carpeta que más les guste.

Después de haber hecho esto se crear nuestro nuevo proyecto y se darán cuenta que les aparecerá algo como esto

Este es nuestro Archivo Game1.Cs que se crea por default a iniciar un nuevo proyecto

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;

Estas son todas las extenciones que usa un juego (por default) si eres perpiucas podras notar que hay alguna llamada Input aquí se encuntra todo lo necesario par controlar el juego desde el Mando 3D o el teclado, Audio sirve para reproducir Audio (¿ quien lo habria dicho?) Etc etc. Las veremos detenidamente mas adelante.

Ahora estas siguientes instruciones que se pueden ver

namespace MiJuego3D
{
    /// <summary>
    /// This is the main type for your game
    /// </summary>
    public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;
        public Game1()
        {
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";
        }

Indican el espacio de nombres de nuestra aplicación que en este caso es un juego, el cosntructor del mismo, miren esta linea

public class Game1 : Microsoft.Xna.Framework.Game

Indica que Game1 es una Clase que Herada de Juego(Game).El cual tiene 2 atributos  el mas imporante de mencionar en este momento es el

GraphicsDeviceManager graphics;

Que es a grandes rasgos el dispositivo de video de la PC o Xbox dependiendo del proyecto.

Ahora bien pasaremos al cosntructor de nuestro juego

public Game1()
        {
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";
        }

La primera linea le dice que va usar el dispositivo de video de la maquina que esta ejecutando el juego, parece exagerado pero es muy importante. La segunda linea señala la ubicación fisica de nuestra carpeta de Contenido, esta es donde guardaremos todos los archivos externos del juegos (Musica, imagines,videos,modelos 3D , etc.)

Continuemos.

protected override void Initialize()
        {
            // TODO: Add your initialization logic here
            base.Initialize();
        }

Esta parte de codigo espara poner todo el codigo que necesitemos para inicializar nuestro juego, aunque ahora solo tenga una linea.

protected override void LoadContent()
        {
            // Create a new SpriteBatch, which can be used to draw textures.
            spriteBatch = new SpriteBatch(GraphicsDevice);
            // TODO: use this.Content to load your game content here
        }

El metodo LoadContent es usado para cargar los archivos que antes mencione (Musica, imagines,videos,modelos 3D , etc.) en la memoria principal para poderlos usar.

 protected override void UnloadContent()
        {
            // TODO: Unload any non ContentManager content here
        }

Por el contrario UnloadContent Elimina de la memoria los archivos que ya no usemos.

Ahora veremos uno de los metodos mas importantes de un videojuego el metodo Update, ya que el algoritmo principal de un videojuego es como muestro a continuacion:

Como se aprecia hay un ciclo infinito donde actualiza la informacion y luego dibuja algo en la pantalla.

La informacion por default en XNA nos muestra que cuando el jugador uno del Mando Xbox pulsa el boton Atrás saldra del  Juego. Algo no muy comun en los videojuegos pero no se preocupen ahora lo modificamos.

protected override void Update(GameTime gameTime)
        {
            // Allows the game to exit
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
                this.Exit();
            // TODO: Add your update logic here
            base.Update(gameTime);
        }

Si bien Actualizar es importante Dibujar es Igual de importante en un juego. Aquí esta el metodo Draw

protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);
            // TODO: Add your drawing code here
            base.Draw(gameTime);
        }

Lo unico que nos aparece es que en todo momento borrara la pantalla y dibujar en su lugar un color Azulito (CornflowerBlue)

Bien ya terminamos de Explicar todo el codigo que nos muestra el Archivo Game1.cs pero que pasa parece que Visual Studio no solo ha creado este archivo si no varios,veamos.

Nos ha creado un Program.Cs 3 Menús una imagen y hasta un icono. De los menús solo diré que Content sirve para Organizar los archivos externos que manejemos, el icono es para mostrarlo en la ejecución del juego. Y el Archivo Program.Cs

using System;
namespace MiJuego3D
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        static void Main(string[] args)
        {
            using (Game1 game = new Game1())
            {
                game.Run();
            }
        }
    }
}

Solo es para Ejecutar nuestro juego, esto, salvo alguna excepción quedara siempre igual.

No era mi intención que este tutorial se ampliara tanto pero es necesario conocer por que están aquí las cosas, así que he decidió hacerlo en dos partes. Esta la explicación y otra en donde en verdad dibujemos un modelo en 3D. Ahora solo queda pulsar F5 (Ejecutar) y deberías ver algo como esto.

Hola de nuevo les traigo a peticion de varios lectores del blog un tutorial de como conectar a internet Puppy linux en su version Lucid.

Al iniciar Lucid nos aparece esta

pantalla lucid linux

Debemos hacer click en “Connect” y nos aparecera el siguiente menu

Ahora debemos elegir la opcion enmarcada “internet by wired o Wireless LAN” (en caso de tener cableado de ethernet, es la mas comun)

Pulsaremos  Networt Wizard en boton enmarcado

Bien ahora pulsaremos en el boton señalado para iniciar la configuracion de la red (puede haber mas opciones dependiendo de las conexiones)

Ahora procederemos a buscar la IP con la ayuda del “Auto DHCP”

esperaremos hasta que nos confirme la conexion

si todo va bien nos deberia parecer el siguiente mensaje

en este momento le diremos que queremos salvar la configuracion dando click en YES

Bien ahora podras navegar en internet o usar el cliente de mensajeria instantanea que gustes

Si te ha gustado el tutorial no olvides comentar, si te surge alguna duda aqui te respondere con gusto

Saludos

Se ha anunciado un nuevo producto de microsoft denominado LightSwitch en el se pretende dar una herramienta a los profesionales que no sepan programar, para poder crear aplicaciones locales y de nube.
Se planea que se pueda manejar tan fácil como lo es Excel o Acces.

Los usuarios que quieran probar esta tecnología, podrán hacerlo el día 23 de agosto, cuando se lanzara la primera versión beta de LightSwitch.

Las aplicaciones que se podrán desarrollar serán tan fáciles como potentes asegura Microsoft. Incluso se podrá implementar Visual Studio para optimizar las aplicaciones, dichas serán implementadas en Silverlight (Actual respuesta de Microsoft a Adobe Flash Player)

Asi que ya saben, todos los que no tengan experiencia en programación esta es una buena opción. No olviden comentar. Saludos

Hola solo para traerles un mini tutorial para que se entienda mejor el uso de estructuras en C, aplicado con guardado en archivos. Aunque es muy simple a los principiantes les va servir mucho.

Subi un video en youtube en:

les dejo el codigo completo aqui


#include <stdio.h>
//ahora debemos de incluir nuestra estructura //
//para este ejemplo usaremos una estructura llamada albañil

//la cual contiene los siguientes datos
//nombre, folio, RFC, direccion, mail, horas trabajasdas, activida realizada y su tipo de pago

struct albanil {
    char nombre[50];
    char folio[10];
 char RFC[11];
 char calle[20];
 char CP[6];
 char colonia[20];
 char mail[50];
 char horas[2];
 char actividad[50];
 char pago[4];
};struct albanil albanil;

//ahora dentro de nuestro main

int main()
{
    FILE *ptr; //inicializaremo una variable a archivo como apuntador
    char archivo[50];//y tendremos una cadena archivo para guardar el archiv con el nombre que sedessee
    printf("Como quieres que se llame tu archivo ");
    scanf("%s",&archivo);
    printf("Dime tu numero de folio ");
    scanf("%s",albanil.folio);
    printf("Dime tu nombre ");
    scanf("%s",albanil.nombre);
    printf("Dime tu RFC ");
    scanf("%s",albanil.RFC);
    printf("Dime tu direccion ");
    scanf("%s",albanil.calle);
    printf("Dime tu codigo postal ");
    scanf("%s",albanil.CP);
    printf("Dime tu colonia ");
    scanf("%s",albanil.colonia);
    printf("Dime tu correo electronico ");
    scanf("%s",albanil.mail);
    printf("Dime cuantas horas trabajaste ");
    scanf("%s",albanil.horas);
    printf("Dime en que trabajaste ");
    scanf("%s",albanil.actividad);
    printf("Dime cuanto te van a pagar ");
    scanf("%s",albanil.pago);
    ptr=fopen(archivo,"a");
    fprintf(ptr,"folio %s\n",albanil.folio);
    fprintf(ptr,"nombre %s\n",albanil.nombre);
    fprintf(ptr,"RFC %s\n",albanil.RFC);
    fprintf(ptr,"calle %s\n",albanil.calle);
    fprintf(ptr,"cp %s\n",albanil.CP);
    fprintf(ptr,"colona %s\n",albanil.colonia);
    fprintf(ptr,"correo %s\n",albanil.mail);
    fprintf(ptr,"horas %s\n",albanil.horas);
    fprintf(ptr,"actividad %s\n",albanil.actividad);
    fprintf(ptr,"pago %s\n",albanil.pago);
    fclose(ptr);
    return 0;
}

Hola, con la noticia de la marca Wedbush ha dado a conocer unos resultados sobre el efecto que tendrá kinect en el mercado según los especialistas  Pachter y Woo, kinect tendrá más de 2 millones de unidades vendida en un periodo entre su lanzamiento y marzo del próximo año. Con lo que se espera que del 5% al 10% de los usuarios de Xbox cuenten con este.

En comparaciones con sus competidores Wii y Move, parece ser que tiene el segundo puesto ya que el precio de Kinect soló es solo $50 Dólares inferior que un consola Wii. Y esto al parecer influirá de forma negativa en las ventas de Kinect, muy por el contrario con su otro competidor  Move, ya que el precio del conjunto PS3 y Move supera por mas de $150 Dólares. Asegura la Firma.

Asi que ya saben a que le apuestan en sus próximas adquisiciones. Aunque hay jugadores que no creen que haya juegos serios capaces de soportar esta nueva (ni tan nueva) tecnología.

los precios estimados en este estudio son:

  • Kinect $150
  • Wii $199
  • Kinect + Consola Xbox 360 $299
  • PS3 + Move $479

Todo es en dólares

Saludos

Hola solo paso para presentarles la nueva ubicacion del blog.

Como explico en el otro blog. 

Ahora que encontraran los mismos posts en ambas direcciones

http://bzkgaming.wordpress.com/

y

http://bzkgaming.blogspot.com/

seran llevados de forma paralela, y decidire despues con cual quedarme

Saludos.

Seguir

Get every new post delivered to your Inbox.