El Advenimiento de las Formas

Esta sección del Tutorial va a cubrir los tipos básicos de nodo de la geometría. Éstos son Box, (Caja), Cylinder (Cilindro), Sphere (Esfera), Cone (Cono) y Text (Texto). Hay más tipos, pero son más avanzados y se explicarán después en otra sección. ¡Así, sin más objeciones, sigamos con él! Este capitulo no debería llevarnos mucho tiempo...

Box

Box es exactamente lo que dice ser, un cubo o paralelepipedo. El Box predefinido es un cubo, de dos metros por lado, centrado en el origen. Para realizar un Box de un tamaño diferente, puedes definirlo con un tamaño explícito:

geometry Box {
   size 5.5 3.75 1.0
}

Esto crea un Box con X, Y y dimensiones de Z como fueron especificadas en el parámetro size.

Las texturas se mapean sobre el Box aplicándose individualmente sobre cada cara. La textura se aplica de la manera obvia hacia arriba en los lados, y en la cara de arriba se aplicará de manera que, si se inclina esta cara hacia la cámara, la textura se verá de manera correcta. El fondo se mapea del modo opuesto, de modo que si el fondo se inclina hacia la cámara, la textura se visualice de la manera correcta.

El cilindro

El nodo Cylinder es ligeramente más complejo. El valor por defecto es un cilindro de +1 a -1 en todas las dimensiones, igual que el Box explicado mas arriba, (radius 1, height 2). También queda centrada en el origen. Para especificar un tamaño diferente, nosotros podemos usar los campos radius (radio) y height (altura). Hay también otros tres campos, side, top, y bottom. Éstos son valores Booleanos (TRUE o FALSE), y dicen al navegador si debe mostrar la sección apropiada del cilindro. Éstos valores predefinidos estan en TRUE,  gracias a lo cual no necesitas especificarlos mayoría de las veces. Sin embargo, si tuvieras un cilindro dónde un extremo este oculto por otro objeto, merecería la pena quitar ese extremo, ya que con esto se reduciría gran cantidad de trabajo del navegador, acelerando la ejecución de tu mundo.

geometry Cylinder {
   radius 0.5
   height 10
   top FALSE
}

Esto da un cilindro alto, delgado sin la cara superior (top).

Las texturas se envuelven alrededor de los Cilindros para que los bordes de la textura se encuentren en la parte de atrás. Los piezas circulares se recortan y se aplican a la cima y base del objeto en la misma orientación que la Caja.

El cono

De nuevo, muy parecido al cilindro, sólo que en lugar del campo radius, tenemos un bottomRadius que hace exactamente lo que sugiere: especifica el radio de la base. No hay tampoco ningún campo top, ya que los conos no tienden a tener cimas. Generalmente.

geometry Cone {
   bottomRadius 5
   height 10
   side TRUE      #Esto no es realmente necesario, ya que está por defecto.
   bottom FALSE
}

Las texturas son aplicadas de la misma manera que en los cilindros. El valor predefinido es un cono con las mismas dimensiones como en el Cyllinder y el Box. El centro de este es un poco más difícil de visualizar. El centro está en el medio, a medio camino del cono. Ahora, cuando tu consideras la caja que contiene el cono parece obvio, pero no es totalmente intuitivo. Así que, un cono predefinido se extenderá 1 metro sobre el plano Y y 1 metro debajo de este plano, teniendo un radio de 1 en la base.

La esfera

El nodo Sphere tiene sólo un campo que es su radius(radio). Hmmmm, qué sencillo ha sido esto.

geometry Sphere {
   radius 10,000,000
}

¡Esta es una GRAN esfera!. Las texturas son aplicadas envolviendose alrededor de la esfera estrechandose en los polos. Si tuvieras una textura con una cuadrícula en ella, las líneas verticales se acercarían cada vez mas cuando esten proximas a los dos polos, mientras que las líneas horizontales quedarían con las mismas distancias todo el tiempo.

El texto & FontStyle

Este nodo crea textos 2D en el mundo virtual. Realmente es muy simple, a menos que quieras hacer cosas más complejas. Entonces usarías FontStyle. El nodo Text tiene sólo cuatro campos. El primero es string (serie de caractéres manipulados como un grupo) dónde defines una cadena de caracteres o una lista de cadenas a desplegar. El campo fontStyle contiene un nodo FontStyle que cubriré en un minuto. Los últimos dos campos son maxExtent dónde especificas la anchura máxima (en metros) del texto, y length que es una lista de longitudes (de nuevo en metros) para cada string, para que puedas especificar una anchura específica para cada uno de ellos. Si se especifican las length, el navegador modificara el tamaño del texto para ajustarlas a ese tamaño.

geometry Text {
   string ["Hola", "Mundo"]
   fontStyle USE HELLOFONT
   maxExtent 5
   length [3, 3]
}

OK este es entonces el nodo Text, bastante simple. FontStyle es más complejo. La mejor manera de empezar aquí es mostrar todos los campos.

FontStyle {
   size
   family
   style
   horizontal
   leftToRight
   topToBottom
   language
   justify
   spacing
}

OK entonces. El size es la altura, en metros, de la línea de texto. El campo family puede tomar uno de tres valores, y altera la tipografia de los caracteres. Los tres tipos son "SERIF", "SANS", o "TYPEWRITER". Para cambiar la apariencia del texto, puedes usar el campo style. Puede tomar cualquiera de estos valores: "PLAIN", "BOLD", "ITALIC", o "BOLD ITALIC". horizontal es un valor booleano que muestra si el texto es horizontal ("TRUE") o vertical ("FALSE"). leftToRight (Izquierda a derecha) y topToBottom (De arriba a abajo) también son booleanos, y su operación es un poco obvia. Con  language, el sistema de caracteres utf-8 puede aparecer de manera distinta, depende en que idioma se lea. Éste es un código de dos-carácteres para el idioma. Realmente no sé lo que son estos códigos, por eso probablemente será mejor ignorar este campo*justify es muy útil, y puede ser cualquiera de estos "BEGIN", "MIDDLE", o "END." spacing es la cantidad de espacio entre las líneas de texto. 1 es normal, y 2 corresponden a doble-espacio (una línea en blanco entre cada línea).

Ése es entonces FontStyle. Realmente puedes ignorar la mayoría de los campos, pero cosas como style, family, y justify son muy útiles.

Y vivieron felices...

Todos los nodos de la geometría vistos hasta ahora (y todos los otros que encontraremos después) se centran en el origen del sistema de coordenadas local. Cuando nos adentremos en el estudio de objetos más complejos, los que acabamos de ver te resultarán obvios. Por ahora, sólo recuerda que el punto para transformar la posición de los objetos y todo lo demás es el centro del objeto. Pues bien entonces, eso es todo sobre este capítulo. Para ver lo que hemos hecho hasta ahora, échale un ojo al Tutorial Mundo 1.5 y a su código correspondiente.

Así que, por ahora tenemos una especie de monumento pequeño, cubierto por una columna plástica verde con una réplica de mi cabeza en la cima. Genial. Éso es todo entonces. Continúa a la próxima lección que es un pequeña y corta explicación sobre cómo realizar enlaces al mundo exterior. Debería ser fácil...

*Esto no es así para nosotros, que utilizamos una acracterización que incluye acentos, eñes, y signos de apertura para las interrogaciones y las exclamaciones. Prometo incluir qué valor necesita ese campo para mostrarla... ¡en cuanto me entere!