Category: Android


Bueno después de algunas horas atrancado con esto me hago a mi mismo un resumen para intentar afianzarlo. De hecho no debería hacerlo por ser bastante sencillo. La complejidad, para mi, ha venido por mal entender un concepto y partiendo de esa falsa premisa no me entraba en la sesera el resto.

He comenzado este artículo haciendo referencia a LIBGDX que es un framework capaz de permitirnos crear una aplicación que se ejecute tanto en escritorio, como en el navegador, como en dispositivos Android (que es por lo que yo la estoy usando). Este framework contiene una “adaptación” de OPENGL ES en su interior y para desenvolverme con las funciones que hacen uso y referencia a OPENGL he tenido que ponerme a aprender algunas cosas.

En fin, OPENGL ES es …. puedes verlo aquí o aquí, una API variante de OPENGL y orientada a dispositivos integrados. A partir de ahora los conceptos que se describen son relacionados con mi experiencia con LIBGDX, que no con OPENGL que nunca lo he usado.

Entre las muchas funcionalidades de LIBGDX tenemos la de poder crear un entorno 3D y llenarlo con objetos que se representaran como si los miráramos a través de una cámara. Esta cámara tendrá su posición en el espacio, o lo que es lo mismo, sus coordenadas en el sistema de coordenadas (en adelante SC) del entorno 3D que nos crea.

El entorno 3D estará, suponemos,repleto de multitud de objetos y estos serán observados desde la posición de la cámara. Además del lugar donde se encuentra la cámara, en LIBGDX podemos definir hacia donde mira la cámara y las distancias mínima y máxima dentro de las cuales cualquier objeto sería visible y por último la relación de aspecto, es decir, el ancho y el alto de la imagen que será capturada por la cámara. Esto define lo que se denomina frustrum, que no es sino la pirámide truncada que se muestra en la figura.

Frustrum OPENGL ES

Y se puede definir con las siguientes funciones:

		PerspectiveCamera camera = new PerspectiveCamera(60, 800, 480);
		camera.position.set(0, 2, 4);
		camera.direction.set(0, -2, -4);
		camera.near = 1;
		camera.far = 1000;

 
En esas lineas de ejemplo estamos creando un objeto de tipo cámara perspectiva con una resolución de 800×480(típica de muchos dispositivos móviles), la estamos situando en las coordenadas (0,2,4) y la hacemos mirar hacia el origen de coordenadas lo que equivale al vector indicado por (0,-2,-4). Además y por último definimos la altura del frustrum indicando a que distancias cercana y lejana puede ver la cámara.

Eso en lo concerniente a la creación de la cámara. Pero lo que realmente me traía de cabeza era el tema de las matrices para incrustar otros elementos en la escena 3D. Yo por algún motivo había comprendido mal siempre que estas transformaciones gráficas partían, o mejor dicho se hacían, desde el punto de vista de la cámara. Y no es cierto. En realidad, por defecto todos los objetos que agregásemos a una escena aparecerían ocupando todos la coordenada origen (0,0,0)

La mecánica para agregar cualquier objeto PODRÍA ser la siguiente (dependiendo de las necesidades de diseño del espacio 3D concreto podrían usarse en otros orden o bien usarse unas o no otras). En fin, para describir el proceso supongamos que todo objeto 3D llega a la escena a través de un portal espaciotemporal.

Lo primero que hemos de hacer es ESTABLECER la matriz gráfica, o lo que es lo mismo asegurarnos que nuestro portal está en el origen de coordenadas.
A continuación GIRAREMOS nuestro portal los grados que sean necesarios para que el objeto aparezca con las inclinaciones adecuadas.
Después MOVEREMOS el portal a las coordenadas donde queremos que el objeto 3D aparezca.
Y, por último, ELIMINAREMOS la matriz gráfica, es decir, eliminaremos el portal.

Esto traducido a lineas de código es:

		gl.glPushMatrix();		//SITUAMOS EL PORTAL
		gl.glRotatef(30, 0, 1, 0);	//GIRAMOS EL PORTAL 30º EJE Y
		gl.glTranslatef( 1, 3, -2);	//MOVEMOS EL PORTAL A LAS COORDENADAS

		//OPERACIONES DE RENDERIZADO  Y TEXTURIZADO DEL OBJETO

		gl.glPopMatrix();		//ELIMINAMOS EL PORTAL

 
Esas operaciones se repetirían para cada objeto 3D y en última instancia algunos otros métodos asociados a la cámara serían los encargados de mostrar el resultado, pero eso da para algún futuro post.

Mientras lo he redactado me he hecho cargo de que puede parecer un autentico pegote para quien ya lo conoce, pero después de haberlo malentendido durante un buen tiempo no quería dejar pasar la oportunidad de explicarlo, principalmente para mi mismo, y que así pueda ser de utilidad en el futuro.

Un saludo

Pues eso.. que estaba hoy con mi espalda machacada por la ciática; y la única silla en la que estoy cómodo es en la que estudio y me siento al ordenador… en realidad es completamente contraproducente por que es la que en definitiva y a la larga me provoca los dolores de espalda.

Bueno, que sentado delante del ordenador y viendo a todo el mundo poner en su avatar una cinta contra la violencia de genero he decidido que mi avatar preferido últimamente, la mascota y logo de Android que modelé en Blender pues tuviera una cinta morada.

Y dado que ya hice una así con la cinta para el tema del cancer de mama… pues no me he querido quedar ahí. xDDD

Al final he montado un kiosko solidario si alguien quiere una cinta que la pida. xDDD

Violencia_de_ Genero_NO
Contra la Violencia de Género

Como en muchas ocasiones comienzo a modelar cosas que luego no termino. Si pudiera dedicarle más tiempo no lo usaría como escape de otras cosas… bueno a lo que iba; en una de mis neuras, me vi en la necesidad de acabar de modelar algo que tenia más que empezado. Esta vez además con el cambio de versiones me ha costado un poco acoplar lo que ya tenia hecho a la nueva forma de hacer las cosas de Blender 2.55.

Pero al final ha merecido la pena. El rigging del robot esta completo y ya puedo posicionarlo a voluntad. Mañana le intentaré poner los materiales que tenga un mejor aspecto corporal.

No se si me resultan demasiado estáticos todos los Androides y los pondría en plan horda bárbara con los brazos en alto y jaleando en busca de bronca.. xDDD

Pero bueno eso ya se vera. Por ahora son una matriz ordenada (simple).

pamiscom
Droid Army Rush

Si consigo moverlo bien lo hago animado… XDD

Después de las fiestas del final del mes anterior, que en el caso de mi querida mascota robótica se han prolongado bastantes días, he decidido hacerle un chequeo médico.

Comenzando por una radiografía completa que aquí os dejo. Al parecer no se aprecia ninguna anomalía.. xD

XRay
X-Ray Check

Espero que os guste.

Halloween Androide.

Saludos de nuevo.

Bueno con la tontería esta de tener modelada la mascota de Android no puedo evitar estas cosas.

De modo que al igual que hice un lazito rosa para mostrarme solidario no hace mucho, este finde semana era necesario, creo yo, hacer algo así.

En principio lo hice para cambiarme el avatar de Twittter… pero me lo pidieron en resolución para la pantalla de la HTC Desire y le he cambiado algunas cosas y lo he enriquecido un tanto.

fondo_desire_halloween
Fondo Android Halloween (480×800)

También me entretuve en renderizar un tamaño hermoso para por si alguien lo quiere usar de fondo… pero para eso me parece que está bastante soso. :p

fondo_android_halloween
Fondo Android Halloween (1920×1080)

Hasta otro momento. Espero que os guste.

EDITADO: Puse formatos PNG que se veían mal. Cambiados a jpgs.

Droide Solidario

Dado que no tengo un minuto libre ahora que está a punto de nacer Darío, y las otras mil historias que llevo a la vez…. pues no tengo nunca tiempo de hacer nada de 3D

Con motivo del día en favor de la lucha contra el cáncer de mama he modelado un triste lazito rosa y se lo he puesto a la mascota de Android que modelé para el anterior trabajo.

La usaré como avatar de Twitter. xD

Aquí os dejo la imagen.

imhungry01_fin
Solidaridad contra el cáncer de mama

Hola Amig@s

Debe hacer no se ni cuanto tiempo que no entraba por el blog para escribir una entrada. No quiero ni mirarlo.

Llevo una temporada ajetreada, pero ya que estoy por aquí os dejo una Imagen que he conseguido montar con BLENDER y GIMP, y Explico brevemente el proceso de acabado final o postproducción que se le suele llamar que en este caso no es mucho y son más bien dos trucos.

La idea surge como parte de unas conversaciones que estos días mantengo muy a menudo, gracias a un grupo de gente fantástica, que he conocido a través de Twitter, y a quienes he desvirtualizado (a la mayoría) gracias a las #tweetcordoba que hemos hecho.

Bueno. Que si Mac mola, que si mola más Android… pues eso… que la verdad es que soy de la opinión de que ANDROID crece y se nutre gracias a Mac o dicho de otro modo: si no hubiera sido por el empujón que MAC dió en su momento al modelo actual de SmartPhone, ANDROID quizás no podría estar donde está. Está opinión se la debo en gran medida a mi amigo Lord Taran, pues me ayudo a terminar de formarla. Y en última instancia fue inspiración para estas imágenes.

No más charla. Imágenes:

imhungry01_render
Render Interno. Blender 2.52a
imhungry01_fin
Acabado con GIMP 2.6.8

Un vez modelado y renderizado los dos retoques principales realizados con GIMP consisten en usar una mascara de capa para separar las manzanas de la parte alta del montón y las que se ven al pie junto a ANDROID. Tras tener seleccionadas estas manzanas el resto de la imagen es sometido a un leve desenfoque gausiano para dar la impresión de que se ha conseguido un desenfoque de campo.

Y por último, seleccionando por color todas las manzanas, en una capa nueva usaremos un filtro de generar Lava. Luego con una opacidad mínima y en modo Claridad suave o solapar podremos ver como ese filtro Lava afecta al color de las manzanas veteando el color de las mismas y dando la sensación de que las mismas tienen algunas manchas.

tuto_post_pro
Pasos del retoque con GIMP 2.6.8

Espero que les haya gustado