Tag Archive: Entorno 3D


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

Anuncios

Esta es la primera muestra de los tutoriales que pretendo escribir y de los hilos que pretendo abrir para discutir y exponer las funcionalidades de BLENDER. Veré si puedo hacerlos como videotutoriales en breve.

En este caso se trata de acercar el entorno de navegación 3D al usuario que se está iniciando en el manejo de Blender.

Bien, vamos a atacar el tema comenzando por cimentar los conceptos sobre el espacio de trabajo y sobre las proyecciones o vistas que Blender nos facilita rápidamente de nuestro entorno de trabajo. Imaginemos el siguiente objeto en el espacio. Se trata de una pirámide cuya base es un paralelepípedo y de una altura igual o mayor al mayor de los dos lados de la base.
Piramide base rectangular
La imagen que se muestra a continuación muestra como se vería dicha pieza si nos situamos como observadores en los lugares indicados con las flechas. El resultado de mirar un objeto en el espacio y plasmar esa “mirada” que llamaremos vista en un plano se denomina proyección. Las proyecciones más significativas de un objeto suelen ser las que se realizan sobre los tres planos ortogonales definidos por los ejes de coordenadas X,Y y Z de nuestro espacio de trabajo. Dicho ejes se cruzan en el origen de coordenadas y forman “dos a dos” los planos XY, XZ e YZ, que serán los planos de proyección principales. Así mismo, las proyecciones mostradas en la siguiente imagen son llamadas habitualmente Planta, Alzado y Perfil.
Piramide base rectangular
Se debe dejar claro como entender los ejes de coordenadas. En el espacio de trabajo 3D de BLENDER los ejes se representan con colores. Lo cual nos ayudará rápidamente a identificarlos mientras trabajamos con nuestra escena.
Los colores son estos: EJE XEJE YEJE Z. Es obligatorio para el buen manejo del entorno comprender de manera casi instantánea cual es la orientación de un objeto o a lo largo de que eje hay que desplazarlo para obtener un resultado deseado de modo que la asociación del color del eje en estas tareas es clave.

Asentados esos datos, los visores del entorno 3D en BLENDER pueden manejarse fácilmente. Sea una ventana de BLENDER tal y como se abre recién instalado el programa. En ella se puede observar un Cubo visto desde arriba, lo que tambien podriamos denominar vista superior o PLANTA. Los siguientes atajos de teclado nos permiten recolocar la posición del observador y obtener una proyección diferente según el atajo.

7-NUM PAD:Vista Superior. PLANTA
1-NUM PAD:Vista Frontal. ALZADO
3-NUM PAD:Vista Lateral. PERFIL
5-NUM PAD:Intercambiar entre modo Ortogonal y Perspectiva
0-NUM PAD:Vista desde la cámara por defecto.

De todos esos atajos en la situación definida, con un único cubo en el espacio la única vista que nos dirá algo será la vista desde la cámara, debido a que un cubo se ve exactamente igual en sus proyecciones ortogonales.

Proyecciones del cubo

Para cobrar constancia de lo que estamos mostrando vamos a modificar la estructura de ese Cubo y vamos a convertirlo en la pirámide de nuestros ejemplos previos.

PASOS A SEGUIR:

  • Colocar el entorno en modo objeto (TAB).
  • Seleccionar el cubo. BOTON-D sobre el objeto. (aparecerá el con el borde en rosa)
  • Situar el visor en la vista superior (7-Num Pad)
  • Pulsar la TECLA-S y justo a continuación la TECLA-X para encoger el objeto a lo largo de ese eje.
  • Cambiar a la vista frontal (1-Num Pad)
  • Pasar de modo Objeto a modo Edición (TAB)
  • Pulsar CRTL+TAB y seleccionar Vértices.
  • Pulsar la TECLA-A una o dos veces hasta que todos los vértices estén deseleccionados.
  • Usar la selección de borde, TECLA-B, y hacer un recuadro sobre los vértices superiores.
  • Pulsar la TECLA-W y seleccionar Merge y luego At Center.
  • Cerramos el modo objeto pulsando de nuevo TAB.

Los pasos resumidos y en secuencia de imagenes se ven en la siguiente imagen:

Piramide paso a paso.

Todas las instrucciones dadas deberían haber desembocado en que nuestro cubo original se ha convertido en una pirámide parecida a la de los ejemplos previos. Se pueden ahora comprobar con los atajos anteriores como las proyecciones se ven adecuadamente.

proyecciones de una piramide

Para adquirir aun más control sobre el entorno 3D, el ratón ofrece algunas funcionalidades especificas. Las más útiles y por tanto más usadas por todos son:
RUEDA: Se realiza Zoom dentro o fuera de la vista actual según se haga girar la rueda en uno u otro sentido.
BOTON-C: Mantener pulsado sobre una vista para obtener el control de la perspectiva. Es lo que denomina “vista del usuario” ya que la proyección no se hace sobre ninguno de los planos de proyección.
MAYUS+BOTON-C: Manteniendo pulsado se obtiene el desplazamiento de la vista por el mismo plano de la vista. Se denomina comúnmente PAN-View o vista de arrastre.
CRTL+BOTON-C: Para aquellos ratones sin rueda en el ratón o para hacer un Zoom suave. Manteniendo pulsado y arrastrando el ratón se obtiene un Zoom hacia dentro o fuera dependiendo de hacia donde se empuje el ratón. Este zoom será progresivo y no por pasos como lo es el que se hace con la RUEDA.

Recomendación: Si hubo algún problema a la hora de realizar la pirámide se recomienda repetir hasta lograrlo. Téngase siempre presente desde que vista estamos mirando. Si no se tiene claro este dato debería de repetirse este ejercicio hasta dominar claramente el entorno de trabajo y las proyecciones de trabajo principales.

Para rematar y completar del todo este documento hay que añadir que se pueden realizar las proyecciones contrarias a las ya nombradas, y que se puede rotar la vista según un par de ejes, vertical y horizontal, imaginarios situados en el centro de la vista activa.

CTRL+7-NUM PAD:Vista Inferior.
CTRL+1-NUM PAD:Vista Trasera.
CTRL+3-NUM PAD:Vista del Otro Lateral.
CTRL+4-NUM PAD:Giro Izquierda.
CTRL+6-NUM PAD:Giro Derecha.
CTRL+8-NUM PAD:Giro Arriba.
CTRL+2-NUM PAD:Giro Abajo.

Hasta aquí la presentación del entorno y los controles para hacer un uso adecuado del mismo. Existen algunas combinaciones más que añaden pequeñas variaciones al uso de cada atajo descrito pero que no son necesarias por el momento.

Espero que lo hayáis disfrutado. Hasta pronto.