Son Pequeños Pero Están Muy Lejos...

Como último capítulo de esta parte, vamos a cubrir el último nodo de VRML que nos queda por conocer -LOD. Muy bien, os oigo decir...-eh, ¡todos los otros nombres de los nodos tenían sentido! ¿pero qué infiernos significa LOD? Bien, LOD es la abreviatura de Level Of Detail, (en castellano Nivel De Detalle) y te permite mostrar distintos objetos dependiendo de lo lejos que se encuentre el usuario.

¿Y por qué infiernos ibas a querer hacer eso? Bueno, hay unos cuantos motivos -El primero es que puedes crear efectos muy guapos con ello. No es un gran motivo para un nodo entero, de todas maneras. Después de todo podrías hacerlos con un ProximitySensor, un Script y un Switch.El verdadero motivo es la velocidad. Si quieres una escena que pueda mostrarse rápidamente, necesitas reducir al minimo el numero de facetas visibles en ella. Ahora imagina que tienes una galería de arte virtual, con una escultura muy intrincada en una esquina. La escultura tiene cientos de caras, y está muy detallada. Si te mueves al otro extremo de la habitación,los detalles seguiran existiendo y dibujandose en la pantalla, a pesar de que no puedas apreciarlos con claridad, de modo que seguira ralentizando el navegador. Si solo muestras la escultura plenamente detallada cuando el usuario se encuentra cerca de ella, y usas una versión más ligera el resto del tiempo, no malgastarás tiempo mostrando detalles que nadie podrá apreciar. Bueno, esto es exactamente lo que hace el nodo LOD. Muestra uno de una lista de nodos, dependiendo de la distancia del usuario con respecto a un punto particular.

¿Como se usa este nodo LOD? Bueno, es muy, muy simple. Funciona de manera similar al nodo Switch, pero éste selecciona la opción correspondientede manera automática. Vamos a echar un ojo a la definición del nodo:  

LOD {
	exposedField	MFNode		level []
	field 		SFVec3f 	center 0 0 0
	field		MFFloat 	range[]
}

Como puedes ver, es un nodo muy sencillo. En primer lugar, el campo level es la lista de nodos que van a mostrarse. Puede ser cualquier tipo de nodo anidado válido, pero mantén en la cabeza que solo se mostrará uno de ellos al mismo tiempo. Si quieres mostrar múltiles objetos, ponlos todos dentro de un nodo Group. center especifica el punto desde el cual se toma la medida de la distancia con respecto al usuario. Normalmente será el centro del objeto. El último campo es range. Este campo especifica a que distancias cambia el nivel de detalle. Los valores de ese campo deben ser mayores que 0, y especificados en orden ascendente. De modo que primero debe ir la distancia más cercana, y por último las mas lejana. Debe haber 1 valor menos en este campo que el mumero de nodos que contenga el campo level. Si la distancia desde el usuario es menor que el primer valor de range se mostrará el primer nodo de la lista. Del mismo modo, si la distancia es menor que el segundo valor en range, semotrará el segundo nodo del campo level, y así. Si la distancia no es menor que el último valor del campo range, se mostrará elúltimo nodo en el campo level.

Puedes ver el nodo LOD en acción en este ejemplo, y también cómo lo he escrito aquí. Hay tres objetos separados por distintos niveles de detalle. 'lump_near.wrl'es el de mayor detalle,'lump_medium.wrl' es una versión media, y 'lump_far.wrl' es una versión muy poco detallada. Si cambias entre los Viewpoints en tu navegador, podrás ver como cambia el modelo durante la transición. Si estásen un rango de 15 metros, verás la versión de mayor resolución. Si estásentre los 15 y los 50, verás el de resolución media. Finalmente, si estás más alejado de los 50 metros, verás la de menor resolución. Simple.

Hay una cosa más que puedes hacer con LOD. Si no quieres introducir ningún valor en el campo level, el navegador se preocupará en decidir que nivel es el que debe mostrar para mantener alto el número de frames por segundo. Si no te preocupa cuando va a cambiar el nivel de detalle (ya que los distintos navegadores y sistemas lo harán en momentos distintos), puedes utilizarlo para automatizar la optimización de tus escenarios. En cualquier caso pienso que es más seguro hacerlo uno mismo, en tanto que esta característica puede no estar soportada en todos los navegadores.

Muy bien, con esto nos hemos ventilado la parte 3, la animación en VRML. Hemos cubierto todos los nodos del VRML, y ahora podemos ponernos serios con los scripts y comenzar a crear algunos efectos realmente especiales. ¡Sujetaos!