lunes, noviembre 19, 2007

Tutorial de Programacion IV - Clases

Las clases son tipos de datos creados por usted, asi como existen tipos para contener numeros y cadenas de caracteres o "strings", ud puede crear tipos de datos que contengan tipos de datos basicos, por ejemplo, ud desea tener una lista de personas ( obvio que no las personas de verdad) con sus datos mas representativos como en una agenda, asi que ud tendria que almacenar campos como estos

  • nombre
  • apellidos
  • telefono
  • correo
  • pagina web
  • dia de cumple
  • mes de cumple
  • año cumple
solo los ultimos tres corresponden a un tipo de dato numerico, todos los demas son texto o Strings, ahora, la cosa es q podriamos crear las variables por separado y no hay problema, pero que tal tener una sola entidad que pueda manejar todas estas, y asi si creamos otra no confundirnos cual es de que persona?

Pues si se puede hacer, una clase puede mantener estas variables dentro de si, asi que solo tendriamos que llamar las variables dentro de las varaibles, esto se haria de la siguiente forma

miVariablePersona.nombre = "Juanito";

miOtraVariablePersona.nombre = "Pepe";

ahora ud dice, por que no crear de una vez mi variable con el nombre Pepe o juanito???

bueno, cuando ud diseña un programa no puede saber el contenido del dato que le va a llegar, mas si el tipo de darto, asi que crea un nombre global, y por eso tiene dentro una variable con el campo nombre que la maneja...

Para crear nuestras clases en java tenemos que crear un archivo TXT con extension .java, y el nombre que le pongamos sera el tipo de Clase que sera la nuestra, para este ejemplo sera Persona.java

El nombre del archivo tiene que ser igual al nombre de la clase, no solo para evitar confusiones, sino por que como cada clase esta separada de las demas, estas se pueden llamar desde otras clases, y al incluir el archivo, java se guia por el nombre para encontrarla.

Ademas que no solo una clase puede estar en un archivo, pueden haber más, pero solo una es visible para las demas clases exteriores, por eso se llama publica

y al ser publica hay que indicarlo dentro del archivo java

public class Persona{

}

asi se declararia nada mas la clase...
El nombre esta en mayuscula por normas del lenguaje, realmente no importa, pero para ud si, por que puede identificar un tipo de dato CLASE al empezar en mayuscuscula, las variables y variables de clase tienen que empezar con una minuscula, y las consecuentes en mayuscula

int miVariebleConValorEntero;
String miVariableDeClaseString;//String es un tipo de dato que es una clase

Una clase como ya dije tiene variables propias, asi que hay que declararlas


public class Persona{
//private indica que la variable solo puede usarse dentro de la clase

private string nombre;
private string apellido;
private string telefono;
private string correo;
private string web;
private int dia;
private int mes;
private int anio;

}

ahora bien

antes puse

miVariablePersona.nombre = "Juanito";

pero esto no es permitido tecnicamente, se puede hacer, pero por temas de seguridad, en donde se pueden conocer las variables y su contenido, la forma de asignar valores a un propiedad, que es como se llaman las variables dentro de las clases, es solo creando funciones que hagan la tarea, llamados getters y setters

Utilizando solo la propiedad nombre para facilitar la escritura y la vision del codigo tenemos lo siguiente:

public class Persona{
private string nombre;
public void setNombre( String nombre){
this.nombre = nombre;
}
public String getNombre(){
return nombre
}
}

asi entonces en lugar de
miVariablePersona.nombre = "Juanito";

tendriamos esto
miVariablePersona.setNombre("Juanito");

asi la unica forma de comunicarnos con nuestras variables de Clase seria por medio de los metodos, que son los nombres que llevan las funciones propias de una clase.

Ahora para crear nuestras variables de clase habriamos de hacer algo parecido al crear por ejemplo un int

int miVarInt;

pero resulta que las clases tienen separadas la declaracion del nombre de variable, y la declaracion de cuando se empieza a asignar memoria,


por eso tiene un metodo propio para esto de la memoria
asi que tendriamos algo asi:

Persona miPersona;//seria la declaracion de la variable de tipo Persona

y para la memoria seria asi:

miPersona = new Persona();
La palabra reservada new se usa para crear la nueva memoria limpia de Persona

pero hay que crear este metodo especial Persona(), para que inicialice a nuestra variable de clase, este metodo con el mismo nombre de la clase se llama constructor, y crea la memoria e inicializa las variables a gusto del programador; tambien puede haber mas de un constructor, pero debe tener parametros que conviertan a ese metodo en diferente de otros del mismo nombre:


public class Persona{
private string nombre;
public void setNombre( String nombre){
this.nombre = nombre;
}
public String getNombre(){
return nombre
}

public Persona(){
nombre = "";//se le asigna nada al nombre
}
public Persona(String miNombre){
nombre = miNombre;//se le asigna antes de usarlo el nombre
}

}

y la creacion seria asi:

miPersona = new Persona();

o con el otro constructor asi:

miPersona = new Persona("Juancito");

mas tarde se puede usar miPersona.getNombre(); y este retornaria "Juancito", como es esperado.

sábado, noviembre 10, 2007

Interludio Musical

Estoy pensando que pornerles para los tutos de progra, asi que mientras, disfruten de esta animación que hice ya hace un buen, y podran ver lo que se puede hacer con flash, cuando se trata de animar...

Y pónganle atencion al piezon de Led Zeppelin, muchos no la han oído, pero es un hit, se la dedico a las rosas...



martes, octubre 30, 2007

Tutorial de Programacion III - Tipos de Datos

De seguro ud recuerda que en los tutoriales anteriores trabajamos con variables que contenían un número, y también que pasamos un parámetro entrecomillado para el metodo println de java para imprimir en consola.

Bueno resulta que cada variable representa un lugar en la memoria RAM (random access memory), y como ud ya sabe nada es infinito, ni siquiera la memoria RAM, entonces
  1. Las variables tienen un tamaño predefinido de memoria para contener un valor
  2. las variables preferiblemente solo aceptan un tipo dato
Estos tipos de dato son aquellos con los que se puede realizar tareas entre sí, como números con números, o texto con texto...

Por ejemplo para realizar tareas con números en java, tenemos que declarar variables de los tipos que dispone para números, como lo son
  • int: acepta dentro números enteros
  • double: acepta números, pero con coma flotante, osea q tienen decimales
Las variables se declaran asi dentro de java

public class ImprimirNumero{
//puede declarar desde aqui arriba
private static int miNumeroEntero = 25;
private static double miNumeroDecimal;

public static void main(String [] args){
//puede declarar desde aqui arriba
int otroEntero;
double otroDecimal = 3.66;
System.out.println("Entero: " + miNumeroEntero );
System.out.println("Decimal: " + otroDecimal );
}
}

Para que se vayan preparando, el metodo main() hace que cualquier archivo con un class sea el que corra el programa, si no tiene ese metodo el class solo sirve para crear estructuras que guardan información y metodos para reusar como el println.

El texto del programa que comienza con "//" significa queel compilador ignorará esa linea, es generalmente usado para poner comentarios, o bloquear codigo mientras se hacen pruebas.

Continuando con el código, las variables dentro del main() son variables denominadas locales, lo que significa que si hay variables fuera del método main(), la que está dentro del método será la que importará al momento de la evaluación del código, ya que cuando ud llama a un método como por ejemplo el println, no espera que una variable declarada fuera, sea utilizada dentro de éste, asi que esto se hace por seguridad, al igual que las variables que estan declaradas por fuera como esta:

private static int miNumeroEntero = 25;

tienen otros encabezados delante del int para hacer referencia a otros aspectos de seguridad que mostraré después, solo fijense que tiene un int delante, pero necestaran poner el private; y el static si quieren usar la variable dentro del main().

A estas variables int puedes asignarle (meterle un valor a la variable) usando el simbolo igual (=) un valor de número entero, o un decimal, solo que el decimal lanzara un error en la consola al ser compilado, diciendote que se perderá presición, ya que se perderian los decimales.

Ud puede crear otras variables para sumar los números, pero si quiere el resultado con decimales, entonces tiene que almacenar el resultado en un double. El método println tambien puede imprimir valores de numeros.


  • String
Un String es el tipo de dato que puede contener texto comun y corriente, para diferenciar su contenido del texto convencional, la asignacion se realiza por medio de texto entrecomillado.
Un String no se declara de la misma manera que un int, ya que un String es una clase que permite crear objetos; una diferencia basica entre un objeto, y una variable, es que una variable como dijimos, tiene una memoria definida, cuando ud la declara, ya el compilador le pone automaticamente la memoria que se usará, pero cuando ud usa un objeto, puede declararla sin usar su memoria, y asignarle la memoria, una linea antes de usarla; esto crea un beneficio de recurso de memoria, ya que no se usa la memoria exactamente hasta el momento que se necesita, y que tambien esa memoria se puede desalojar despues de usada.

  • Declaracion de un String
String miTextoAlternativo;

De esta manera ud declara a miTextoAlternativo como una variable SIN MEMORIA.

Luego en el momento que quiera usarla hace lo siguiente:

miTextoAlternativo = new String();

al hacer esto, ud llama a un metodo propio del objeto String, que le asigna memoria a cualquiera de sus variables, pero tambien puede asignarle la memoria al momento de crearla:

String miTextoAlternativo = new String();

pero tambien puede hacer esto:

String miTextoAlternativo = "";

o esto:

String miTextoAlternativo = "Tutorial de progra";


Me dijeron una vez que asignar de una vez "" o con texto entre las comillas es mejor que llamar al metodo String() y luego ponerle el texto que quiero usar, ya que se llama dos veces internamente al proceso que da memoria, y por supuesto, innecesario.

Ud puede sumar dos Strings como dos números, pero con resultados diferentes, ya que aunque internamente son números, ya que cada caracter equivale a un numero del codigo ascii, lo que pasa es que las cadenas de caracteres se concatenan.

Estos Strings tambien se pueden pasar de parametro a println, por lo que pueden probar si pueden imprimir su nombre en una variable...

Intenten a ver que les sale y me cuentan...

viernes, octubre 26, 2007

Tutorial de Programacion II - Compilar en JAVA

Si no tienes java puedes conseguirlo en java.com pero solo para ejecutarlo, para crear y compilar debes ir a SUN y descargar el JDK que son 65.64 MB

Si ud tiene ganas de empezar a programar en java, pues entonces empecemos, y vayamos dando teoría mientras damos práctica.

Bueno, aquí vamos a compilar java como los hombres, desde consola!

Primero espero que estén en Windows no me importa que versión.

Para hacer una prueba de un archivo java hagan lo siguiente:

  • abran un bloc de notas
  • insertar dentro lo siguiente
public class ImprimirTexto{
public static void main(String [] args){
System.out.println("Salida de Texto");
}
}

  • Guarde el archivo con el nombre de ImprimirTexto.java en el escritorio
  • Abra una consola o Símbolo de Sistema de Windows
    1. Puede abrirlo en esta ruta: "inicio/accesorios/simbolo de sistema"
    2. O puede ir a "inicio/ejecutar", y digitar "cmd"
  • Dirijase a la ruta donde ud creó el archivo .java pero dentro de la consola
Si está por ejemplo en el directorio "C:\Documents and Settings\miNombredeUsuario>"

para pasar al directorio "Escritorio" digite en la consola "CD escritorio". El comando CD significa Change Directory, y no tiene nada que ver con abrir el CD ROM como creyeron por ahí.

Como el archivo ImprimirTexto.java esta en el escritorio, y ahora ud esta en el escritorio dentro de la consola, entonces, solo ha de compilar el archivo y para lograrlo, digite lo siguiente:

javac ImprimirTexto.java

Hay que respetar las mayusculas, ya que el lenguaje tambien lo hace, esto por que es una regla.

Ahora si todo esta bien escrito dentro del *.java, no generará errores, entonces el compilador creará un archivo del mismo nombre que el .java, solo que con extensión .class indicando que es el compilado.

Este archivo es de una forma "ejecutable", no como un EXE propio de windows, por que utiliza la maquina virtual como intermediaria, pero gracias a este realizará un resultado semejante a una aplicacion windows, con la ventaja de ser multiplataforma.

Para correr este programa, igual desde la consola, digitamos igual dentro de la ruta del escritorio donde igual se encuentra nuestro .class lo siguiente

java ImprimirTexto


Si todo sale correctamente la salida en la consola debera ser: Salida de Texto

Así será el primer programa es java, a estos programas en pantallas negras se les denomina programas de consola, utilizados principalmente en servidores cono UNIX, que no necesitan interfaz gráfica, por que esto consume recursos que evidentemente pueden ser usados en atender peticiones a los clientes del servicio. Pero no se preocupen, Java también puede crear ventanitas con botones para la comodidad del usuario, pero primero tienen que aprender a hacer esto antes de graficar, el cual, aunque ayuda en el aprendizaje, se omiten muchos detalles, ya que una vez que estás en esta, no quieres salir.

Aprovecho para mostrar un poco más sobre como funcionan los métodos usando este ejemplo, como pueden ver, el metodo println tiene un argumento o parametro entrecomillado ( luego me referiré a esto), esto quiere decir que lo que este dentro sera un texto comun y corriente, que no es variable ni nungún identificador especial, quiere decir que se imprime exactamente lo que esta entre esas comillas. Este método println acepta cualquier texto entrecomillado, demostrando la funcionalidad de un procedimiento como se explicó en el tutorial anterior, ya que por dentro, aunque no lo veamos, este método puede tener 100 lineas que no necesitamos repetir para imprimir texto en la consola, sino, que solo invocando su nombre, y dandole el texto que queremos ver funciona de la misma manera, ahorando espacio en nuestros archivos de codigo, y permitiendonos leer más rápidamente, y encontrar errores de la misma manera.

Tutorial de programación I

lunes, octubre 22, 2007

Tutorial de Programacion I - Variables, Constantes, Procedimientos y Funciones

Bueno, para aprender programacion basica, a pedido de Nitos y Crox, he decidido enseñar los conceptos basicos con JAVA, por que es gratis, por que tiene clases, por que tiene muchas cosas...

Mientras llegamos a los importarnte con java, explicare terminologia basica que es necesaria para empezar, y mientras necesitan descargarse por supuesto JAVA, en java.com, y si quieren para ayudarse con la programada, JCreator, TextPad o algo pesadito como NetBeans que en ciertos casos ya viene con java.

Ahora bien olvidandonos de la historia y de complicaciones, si ud quiere crear algo, cualquier cosa que ve en la pantalla de la computadora, por aqui puede empezar.

Empecemos:

  • VARIABLES

mucha de la programacion necesita mucha matematica, hay conceptos que son muy silimares, pero que difieren en el significado final, por ejemplo

x = 10

eso quiere decir en lenguaje funcional matematico que la "x" es igual a 10;

pero en programacion, cuando se realiza esto, se quiere dar a entender que la "x" tiene por dentro el valor "10"; ahora, que tiene esto de util?
"x" en el contexto de programacion se llama VARIABLE en este caso, osea que su valor puede cambiar; de nuevo, que tiene esto de util?

igual que una formula matematica ud puede tener algo asi
resultado = x * .1

sabiendo que "x" seria por ejemplo el monto que ud cobró por la venta de algo digamos unas tennis en su trabajo de vendedor, y el resultado seria su monto de comision de 10%, al multiplicar ese valor.
Toda esta informacion sera llevada a "resultado" que es otra variable, y este resultado se puede usar en otros calculos, o ser "impreso" en pantalla para decirle a el usuario que monto ha ganado.

Entonces, como definicion, tenemos q una "variable" en un espacio de memoria que tiene un contenido no definido, hasta que se ejecuta el programa.

Ahora, al igual que en matematica convencional se usan palabras para representar conceptos, como ya vimos, el "resultado" es una variable, osea q ud usa esa palabra para almacenar un dato, en este caso un numero.

Pero como ya se dio cuenta, que la hace especial de cualquier palabra a una variable, como distinguirla para poder asignarle un dato?
Bueno, para no referirme aun a java, usare terminologia de action script de flash, q no necesitan saber para entender, pero es mas facil de entender en un principio que java.
La cosa es que UD tiene que indicarle al programa que tal palabra la vas a usar como identificador para una variable en flash se haria asi en su version 2.0:

var resultado;
var x;
x = 10000;
resultado = x * .1


asi tendriamos que "x" y " resultado" son variables por que se lo hemos dicho al programa, para futuras referencias, el programa q lee el codigo es un "compilador"

Ahora, ud se pregunta, donde pongo todas esas variables para que mi compilador java los lea?

Bueno, todos los codigos de programas son de hecho texto plano, que quiere decir esto? que es un archivo tipo BLOC de NOTAS, osea que ud puede escribir su programa java en bloc de notas, y cambiar la extension de .TXT a .JAVA y listo... pero hay programas que ayudan a recordar cosas, para eso estan JCreator y NetBeans, pero no tanto asi TextPad.



  • CONSTANTES
Continuando con el codigo, hay otro tipo de identificadores que se denominan "constantes", que son como las variable, pero definidas desde el principio del programa, y que ud sabe que sus valores no van a cambiar

const PI = 3.141592654;

la constante PI nunca va a cambiar, tambien por esa razon, muchos compiladores la traen integrada, pero hay que saber como llamarla.

  • PROCEDIMIENTOS
Entremos a lo bueno. Que sucede si necesita calcular 10 veces, pero con diferentes valores, el 10% de la venta de alguna mercancia? repetitivo cierto? y si son 50, o mil?
Bueno que sucede si nuestra formula tiene 100 lineas?
La cosa se complica no?

Y ya que estamos con esto de los identificadores, seria bueno tener esas 100 lineas bajo una sola palabra y llamarla no? y solo darle los valores que cambian, como "x" y que nos de el resultado en otra variable, que seria "resultado"

Entonces poniendo ejemplo flash para crear esta tarea enorme y repetitiva hacemos lo siguiente

function calculoExtenso (var x, var resultado){
      resultado = x * .1;
}

Al igual que con la variable o la constante, se utiliza una palabra para indicar al compilador que la palabra que sigue se usara en lugar de todo el codigo que esta dentro del bloque ( {} ) identificado por las llaves, en este caso function; en los parentesis redondos ponemos las variables que necesitamos dentro del bloque. Pero si anteriormente declaramos variables sobre el codigo, por que ponerlos entre parentesis?

Al momento de llamar al procedimiento, usted no puede modificar el codigo de adentro, claro que puede cambiar el codigo que esta entre llaves, pero no cuando hace la llamada, que seria de esta manera

var miNuevoResultado;
var precioZapatos = 15000;
calculoExtenso(precioZapatos, miNuevoResultado);
.
.
utilizamos miNuevoResultado en otras operaciones
.

calculoExtenso(15000, miNuevoResultado);
.
.
utilizamos miNuevoResultado en otras operaciones
.

ahora, como se puede ver, solo lo que esta entre parentesis se puede modificar dentro del procedimiento, estos son llamados "parametros" por que el procedimiento los necesita para funcionar; el segundo parametro siempre tiene que ser variable (solo este caso), por que sino, no podremos utilizar el resultado que nos devuelve el procedimiento.

Internamente "miNuevoResultado" es igual a var "resultado" dentro de la declaracion del procedimiento.

  • FUNCIONES
Una funcion es un procedimiento que devuelve un resultado. Pero para que si ya tenemos que los procedimientos pueden devolver valores por variables?

Bueno, si es cierto, pero va a facilitar la lectura y codificacion de programas...

Ahora, a que me refiero con que devuelve un valor?

Me refiero a que puedo usar el identificador del procedimiento en lugar del resultado que de el codigo que queremos simplificar, por ejemplo:

si ya tenemos que

C = A + B;

osea pondremos en C la suma de nuestras variables A y B, pero podemos usarla con un identificador que nos ayude a ver y hacer esto mas rapido.

function suma(var A, var B){
      var C = A + B;
      return C;
}

para que sirve return? este identificador propio de programas como java, indica que el valor se devuelve en lugar del nombre del identificador, por lo tanto, para ver que significa esto, podemos hacer lo siguiente:

D = suma(10, 20) + suma(15, 30);

por "debajo" suma(10, 20), como ud ya sabe es 30, y suma(15, 30) es 45, asi, sin que ud lo note, se intercambian por esos valores, y se puede realizar la suma mas grande:

D = 30 + 45;

y D de una forma transparente captaría el resultado.


Aqui terminamos por hoy, no es que sea muy bueno explicando, pero es mejor que le expliquen a uno en un lenguaje mas comun, pero como igual sigo con muchas mañas de los programadores, si no entendieron algo, haganmelo saber.

Hagan preguntas ahora, para responderlas en la segunda parte, o en los comentarios

lunes, octubre 15, 2007

Errores de mi Computador


pantallazo azul

Desde que soy usuario de mi tarro (computador) me he visto enfrascado en un sin número de problemas que sinceramente no comprendo, recuerdo que en mi viejo computador tambien tenia errores, pero nunca tantos y tan rajados o salidos de la razon como los que voy a enumerar a continuacion:

  • El sistema no inicia por la corrupcion del archivo system
  • A cada reinicio de sistema se ejecuta el scandisks para reparar corrupcion de archivos
  • Por la misma corrupcion de archivos programas empiezan a funcionar mal
  • Durante un tiempo msn estuvo lanzando un error cada 5 minutos
  • Un ventilador se me fundió
  • El ventilador de la fuente de poder empezó a fallar
  • Mi computador se reiniciaba -lo más seguro por un virus-
  • y finalmente Pantallazo Azul, conocido en el underground de programadores y afines como Blue Screen of Death
Para cada uno tuve que ingeniarmelas como buen programador a sacarme una solución de la manga sabiendo que no sé electrónica, por ejemplo para el archivo system despues de dos dias de navegar en el tarro de mi hermana, encontré que sin ese archivo no arranca windows, y que la única forma de recuperarlo era copiandolo desde el mismo disco de windows, hacia la locación en mi tarro; por consiguiente cada vez que pasaba -y aún pasa- tenia que insertar el disco de windows, esperar a que mi pedazo de cd rom leyera como si fuera a instalar, y esperar a que me saliera la opción de consola de recuperación, que para tal caso es un símbolo de sistema en pantalla completa -descripcion para los ignorantes- y tenia que escribir la ruta del archivo para borrarlo, e igual ir a la unidad de cd rom para copiarlo y devolverme al disco duro para pegarlo, cosa que se volvio muy aburrida, por lo que encontré como solución realizar un txt con los comandos como un archivo BAT para windows, solo que en la consola primero se ejecuta el comando BATCH para ejecutar el archivo.... un problema menos...

La corrupción de archivos no pude solucionarla completamente, pero averigue que separar los "archivos de programa" de la unidad C -o unidad de arranque-, evitaría menos acceso al disco y manipulación de los archivos del sistema, asi que se eliminó un poco.

El msn tuve que reinstalarlo en otra unidad para que dejara de enviarme mensajes de error.

Para mi ventilador malo que enfriaba mi procesador, quité el ventilador de una fuente de poder que me dieron, y a pesar que era mas grande que el anterior, hice un Mc Gyver para ajustarlo y es el que actualmente está...

Mi tarro se reiniciaba por un virus... un buen NOD32 configurado se jala del problema...

y para un pantallazo azul? pues que les diré... esos errores que lanza no los entiendo para nada, como que son para despistar los errores del sistema que los mismos desarrolladores se jalaron... una vez leí por ahi que no perdiera tiempo tratando de reparar el pantallazo azul, que cerrara mi boca y formateara... y sinceramente es mi humilde consejo, si les sale un pantallazo azul... formateen su tarro si tienen prisa para hacer algun trabajo... sino tienen prisa pues... cuentenme como les fue que yo no se como hacerle...

viernes, octubre 12, 2007

Iluminación en Blender

Quiero ahora mostrar como se ven las iluminaciones en Blender.
Al igual que Povray tiene raytracing y radiosity, pero ademas tiene otro tipo de juego de iluminacion llamado Ambient Occlusion, el cual crea sombras suaves cuando los objetos estan muy cercanos


Blender Raytracing


Como ven, igual que en povray, un punto de luz crea una sombra solida, no degradada.


Radiosity en Blender

A pesar que esta ultima imagen es un mal ejemplo, ya q no tiene toda la calidad que quisiera, igual podemos ver que las sombras son tenues, mas cercanas a la realidad.



Ambient Occlusion


Finalmente la Ambient Occlusion oscurece creando sombras, cuando los objetos estan muy cerca, por eso en las esquinas del cubo, por ejemplo, esta sin oscurecer cuando toca el plano.



las tres iluminaciones

Esta última tiene los tres efectos de luz, la cual me parece ha quedado muy bien, a pesar de que los objetos son basicos.

lunes, octubre 01, 2007

La Radiosidad en PovRay - (Radiosity)

Generalemente cuando se realiza una imagen 3D, lo que se quiere es que como resultado final una imagen se vea realista, aunque los objetos que en ella se encuentren se vean muy simples, para esto es generalmente necesario, colocar una buena iluminacion, creando sombras semejantes a la realidad, este tipo de ilumimacion se llama Trazado de Rayos o raytracing, en el cual, un determinado punto de luz, dispara haces de luz o rays en todas direcciones, asi se calcula q rayos den ir hacia la camara y solo esos son tomados en cuenta. Lo particular de este metodo es que solo toma una parte de los hechos que pasans en la realidad con la luz, ya que la luz tambien colisiona con otros objetos y esa luz colisiona con los demas, causando deferentes coloraciones.


imagen con raytracing

Observen que en la imagen anterior se crea una sombra bien definida, y que alrededor del cono y de la esfera, hay un ligero degradado, algo que se espera, pero dentro de la sombra en la realidad, la luz rebota por ejemplo del cielo y colisiona con los objetos, dandonos una pequeña percepcion de estos al rededor.

Esto no se puede calcular con los rayos normales, pero el metodo de radiosity que es experimental aun en el caso de povray, ayuda mucho a solucionar este problema.


iluminacion con radiosity

Como se puede observar en esta ultima imagen, que solo contiene radiosity, la imagen ha cambiado, un efecto mas realista se presenta, creando diferentes grados de sombra e iluminacion. Esto es logrado gracias a que un objeto cualquiera designado por nosotros, al que llamaremos emisor esparcira su imagen a travez del espacio, asi, los objetos que esten mas cerca recibiran una imagen mas iluminada de si mismo, y los lejanos recibiran una con menos intensidad, resolviendo de manera parcial el problema de la iluminacion ambiental. En esta imagen a pesar que no esta enfocada por la camara, existe un "cielo" que emite luz ambiental, que es tomada por el radiosity para crear imagenes de si mismo para crear las sombras; este "cielo" es simplemente una esfera hueca, agrandada 5000 unidades para encerrar el espacio y crear un buen efecto.

Pero la idea de la iluminacion no se queda ahi, igual se pueden usar las dos iluminaciones para crear un efecto mas realista.



radiosity y raytracing

Asi ya tenemos en esta imagen ambas iluminaciones, creando lo que queriamos, la iluminacion degradada en la sombra, que es lo mas cercano a la realidad.



un ejemplo de la galeria de povray

Finalmente este ejemplo elaborado de Hildur Kolbrún, donde solo existe luz de radiosity.

jueves, septiembre 27, 2007

Un efecto de Fuego en Flash

Recuerdo que hace un tiempo un buen amigo a quien no veo ya por que no se que se hizo (jeje), me mencionó si se podia hacer en flash ese efecto tan común en ciertas páginas web, en que al mover el mouse por la pantalla, al captar el evento de la posición, dejaba un rastro de letras que caían, o de lo que fuera, sin pensarlo mucho le respondí afirmativamente, y me dediqué a ver que podía hacer... pensé que se podia llevar mas allá y hacer que un MovieClip fuera el rastro, así más tarde si quisiera, lo reemplazaría por cualquier cosa, así nació el efecto de fuego, como parte de las experimentaciones, les he puesto este flash con un efecto "extra", resultante de no eliminar los MovieClips despues de desaparecer, por lo tanto se quedan en memoria y no se borran. Solo pasa el cursor sobre el cuadro blanco, y sabras a lo que me refiero. Luego pondré el efecto terminado con variaciones y otros efectos que colateralmente salieron junto con este efecto.















martes, septiembre 25, 2007

Comparando Software 3D

No terminé de crear el último post cuando me encontré la siguiente información, una tabla de comparación con los programas más usados en la industria el Blender, donde en muchos casos no supera a los más conocidos, pero se mantiene tras de ellos, con la ventaja de que es gratis. Aquí abajo les dejo el link.

Comparación de Programas 3D

Elephants Dream - La Película Blender 3D



Para los que se han preguntado la capacidad de los programas gratuitos, he decidido poner aqui, la traducción al español de la pelicula del "orange open movie project", la cual revela la la capacidad de un programa, al que han comparado con el mismo 3D Studio Max, pero con solo 30MB de espacio en el disco duro.




www.elephantsdream.org sitio oficial de la pelicula
www.blender.org sitio de blender 3D

lunes, septiembre 24, 2007

Tests de Blender

Estos son unas pruebas que he realizado en blender, no llevo mucho con este programa, pero ya podran ver lo que se puede hacer con un poco de intento.
Estas pruebas corresponden a "simulacion de fluidos" para crear agua animada, "animacion de particulas" para crear humo y fuego, y un "softbody" para crear una gelatina; este tambien es usado para crear prendas suaves como ropa, otro ejemplo seria hacer una bandera:

lunes, septiembre 17, 2007

Mi solucion alternativa al maskedTextBox de .NET 2005

La solucion alternativa corresponde al problema que tuve hace unos dias, para usar un maskedTextBox en .NET 2005, con el que queria hacer que con una mascara de solo numeros, validar sin mucho enfuerzo el contenido antes de enviarlo a mi base de datos, todo iba muy bien hasta que me di cuenta que este control, permite el ingreso de "espacios" entre los digitos de la mascara; si ud presiona la tecla de espacio, si ud utiliza las flechas, este control te deja un "hueco" sin llenar con algun caracter numerico. No hay problema si este es puesto al principio o al final de la secuencia, el problema llega cuendo digitas un espacio entre los numeros, asi por ejemplo, con una mascara "0000" la que supuestamente evita los espacios, al ser ejecutado el form se puede poner esta secuencia "12_3"; este nos daria un error si lo intentamos almacenar en una base de datos con un campo int, lo que al fin y al cabo nos lleva al principio, tenemos que realizar un codigo para validar la cadena inclusive usando el maskedTextBox, asi que como solucion propongo lo siguiente:
  • usar un textbox
  • crear un metodo que identifique un numero entero retornando un boolean
Ahora, en este textbox al que llamaré "codigo", usamos el evento keyPress para identificar en que momento se presiona, luego evaluamos el caracter para saber si es o no un numero, y luego, y dando que no, le asignamos a ese mismo caracter presionado un string vacio ("") para que de esta forma vuelva hacia atras como lo muestra el codigo:

Private Sub codigo_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles codigo.KeyPress
If Not esEntero(e.KeyChar.ToString) Then
e.KeyChar = ""
End If
End Sub

De igual forma si se requiere limitar el numero de caracteres simplemente se contara el length y si es superado, se vuelve a asignar un string vacio.

Espero que haya sido util.

viernes, septiembre 14, 2007

Encuesta sobre programas 3D


Muy bien, yo se que hay muchos programas para desarrollar 3D, pero a mi gusto los que puse en la encuesta son los que mas buya hacen, y los q mas conozco y los que mas uso como PovRay y Blender; programas gratis que hacen que el individuo se rompa la cabeza por su falta de interfaz, y por su interfaz respectivamente hablando de cada uno, y para el que los conoce sabe de lo que hablo.
Estos programas gratis no pesan mucho, pero te complicaran la vida si no eres desarrollador de software. En el caso de povray es como abrir una clase java en un bloc de notas, simplemente atractivo(!) pero simplemente se necesita paciencia y seis meses disponibles para aprender lo mas sencillo. En el caso de blender la dificultad radica en su interesante interfaz, llena de botones hasta en partes ocultas, y de cortos de teclado para facilitar la vida, pero que pone a prueba nuestra memoria; sin embargo blender tiene a su haber tres peliculas denominadas "open source" ya que por ser realizados con este, esta permitido por los autores que cualquiera pueda accesar al codigo para su revision.

Ahora voten y si quieren dejar su queja particular del porqué no metí en la lista un determinado programa pueden hacerlo... y talvéz haga la encuesta nuevamente.

jueves, septiembre 13, 2007

Como pasa el tiempo...

Carajo hace rato ya en que nada publico, no es que no me importe, pero sinceramente uno tiene otras cosas que hacer aparte de poner cosas aqui y que las personas las vean, pero mi interes es hacer algo atractivo a largo plazo sobre mis creaciones...
más que todo sobre mis animaciones...
Se pueden dar una vuelta por mi youtube para ver mi material, que terminare de explicar poco a poco aqui

youtube.com/absulitcr

viernes, abril 27, 2007

Solo para Programadores... XD


Para programadores de C y/o C++... recordar los viejos tiempos de estudio con un poco de humor...
Solo hagan click sobre la imagen para agrandarla.

jueves, abril 26, 2007

3D para Programadores

Para aquellos que no son programadores, este programa talvez resulte ser tedioso: interfaz de texto, una ventana de rendering... pero para aquellos que sí tenemos paciencia para escribir un rato y ver que no pasa nada, aqui esta PovRay-Persistence of Vision Raytracer- el cual simula los efectos de la luz es un entorno virtual, enteramente programado.
Debido al poder de la programación, simples lineas de código como como un while pueden ser una ventaja total, crear una fila de objetos iguales se reduce a poner un limite de objetos requeridos.
Texturas y materiales pre-definidos ayudan mucho cuando no se quiere crear uno nuevo, pero de igual forma se pueden crear librerias de código para reusar, como en C y C++.
Sin más les presento la cuarta version de una misma escena que he renderizado con pov ray, asi como los link para que ustedes mismos vean el programa, y la pagina de los autores.

La página de los Autores POVRAY.ORG
Descargar POV-RAY

martes, abril 24, 2007

Una animacion en Flash



Para esto hay que sacar el rato, no crean que no, pero generalmente me aburro en un par de dias, pero queda vacilon para ver...
Una animacion inspirada en la cancion de la serie Highlander... "Princes of the Universe" de Queen.

Sebastián Sanabria Diaz
absulitnow@gmail.com

domingo, abril 22, 2007

Nuestra Idea

Este blog apenas esta iniciando, pretende ser el espacio para un grupo independiente que mostrará sus trabajos sobre diseño y programacion.

Presentacion de imagen, animacion 2D y 3D, seran nuestros objetivos de aqui en adelante.