Director 8.5 ofrece la capacidad de programar simulaciones y juegos en 3-D de muy alta calidad, con la posibilidad de reproducirlos por Internet con Shockwave Player. Sin embargo, no hay que olvidar otras opciones con las que hacer algo parecido en Macromedia Director, desde su versión 6 o 7, de forma gratuita. Una de las opciones más interesantes en este sentido es el T3D Engine, un motor de 3-D creado por Barry Swan (en cuyo sitio web, www.theburrow.co.uk/t3dtesters. puede encontrar una gran cantidad adicional de información, recursos y ejemplos de código) de código abierto y que le permitirá extender las capacidades de Director hacia “la tercera dimensión”.

El T3D Engine se distribuye como Cast abierto, lo que permite examinar libremente todo el código, e incluso incorporarlo a proyectos en red con Shockwave, simplemente copiando los behaviors al cast del proyecto.

Para empezar a probar este motor sólo es necesario bajarse los cast y los ejemplos de la página web del autor. A partir de ahí, el uso del motor para los proyectos es totalmente libre.

Si busca la mayor facilidad de uso posible, T3D permite trabajar a muy alto nivel sobre las rutinas del núcleo, con funciones muy fáciles de comprender y muy cortas, que permiten sacarle enseguida todo el jugo sin demasiado esfuerzo ni conocimientos previos de programación en 3-D.

Estos son las características soportadas por este motor Lingo:

Iluminación. Por omisión puede trabajar con un máximo de ocho luces; cada una de ellas con su propio color, posición y dirección. Elegir entre fuentes de luz puntuales o infinitas, además de modificar los valores de difusión y especularidad.

Niebla. Puede hacer que los modelos se desvanezcan a un color uniforme en una distancia dada.

Importación de objetos. Puede cargar y editar objetos creados con diversas aplicaciones de 3-D.

Detección de colisiones. Incluye soporte (algo básico) para detectar la colisión de objetos en el espacio 3-D de tres formas diferentes: las esferas y cajas en la que están “contenidos los objetos, y utilizando los vértices de los objetos.

Animación. Los objetos pueden contener fotogramas de animación.

Colores. Cambiar el color de un objeto o de alguna de sus facetas (caras) sólo implica dos líneas de código.

Sprites 3-D. Soporte completo de sprites 3-D, incluyendo la detección de colisiones, los cambios de color, animación y efecto niebla. También son scriptables.

Modelos alámbricos. Soporte completo, con detección de colisiones, cambios de color, animación y efecto niebla.

Interacción con las caras de los objetos. Puede hacer que cada una de las caras del objeto responda a diferentes eventos del ratón para ejecutar los handlers (rutinas) definidas: MouseUp, MouseDown, MouseEnter, MouseWithin, MouseLeave y Mouse-UpOutside.

Al descargar T3D encontrará dos versiones del Cast, uno, hace los cálculos matemáticos con números enteros y otro, con números de coma flotante (decimales). Es más recomendable utilizar el primero de ellos, ya que es el que proporciona mayor velocidad de ejecución, mientras que el segundo sacrifica algo de velocidad a cambio de una mayor precisión en las operaciones.

Empezar con T3D

Tiene una sintaxis que recuerda a OpenGL, por lo que no le resultará muy difícil de utilizar si ya ha visto algo de esta tecnología. Si no es así, con los ejemplos utilizados en este artículo y con el examen de los ejemplos que puede encontrar en la web del proyecto, no le resultará muy difícil comprender su funcionamiento e implementar sus nuevas ideas, siempre y cuando ya tenga experiencia en la programación con Lingo.

Antes de empezar a trabajar debe pensar que un objeto 3-D necesita como mínimo tantos canales libres en el Score como caras tenga el objeto. Por ejemplo, para colocar un cubo hay que reservar 6 canales.

Partiendo de aquí, puede pensar que cada cara de un objeto es un nuevo sprite en el Score. Esto facilitará mucho las cosas cuando necesite acceder a todas las propiedades de cada una de las caras de un objeto 3-D, para cambiar su textura, color, manejar un evento, etc.

Veamos cómo crear en un cubo simple con una textura:

global gObject

gObject = script(”T3D Object”).new (#T3D_CUBE, 1, 8. 0 , “textura”)

Aquí se ha asignado una variable global al objeto, llamada gObject, lo que permite referirse al objeto en diferentes puntos del proyecto. A partir de ese momento, el objeto tendrá un identificador que corresponde a su nombre de variable global.

El primer parámetro que se pasa en esta función es el tipo de primitiva a crear. En este caso un cubo prefabricado del propio motor. A continuación, los dos números que se añaden al parámetro inicial del objeto (“1” y “8.0” ) se corresponden con el primer canal del Score a partir del cual se empezarán a dibujar las caras del objeto, en este caso el canal 1, y con el tamaño inicial del objeto.

Por último, el parámetro “textura”, indica el nombre de un bitmap importado en el Cast del proyecto y que será la textura que se aplique por omisión al objeto creado.

Con este código tendrá definido un objeto básico, con todo lo que necesita recordar antes de colocarlo en escena.

Además del cubo, T3D dispone de otras primitivas prefabricadas con las que puede trabajar directamente:

Esferas. tObject = script(“T3D Object”). new( #T3D_SPHERE, canal1, diametro, divisiones, circdivisiones, textura)

Conos. tObject = script(“T3D Object”). new( #T3D_CONE, canal1, diametro, altura, pasos, textura)

Cilindros. Si lo que desea es trabajar con archivos 3-D importados de otras aplicaciones, T3D soporta los formatos OBJ (Lightwave; #T3D_OBJ), DXF (uno de los más populares; #T3D_DXF) y 3DS y ASC (3D Studio; #T3D_3DS).

Cámaras y coordenadas de posiciones

Una necesidad muy importante en cualquier motor de 3-D es la de crear y manipular cámaras.

Para definir la posición de la cámara en el espacio 3-D y la posición en la que está apuntando, utilice:

t3dPointview( tX, tY, tZ, tXAngle, tYAngle, tZAngle )

Esto contiene los valores de posición de la cámara (x, y, z ) y los ángulos de rotación para cada uno de los tres ejes (tyAngle y tZAngle), que indican la dirección en la que está apuntando.

A partir de aquí se dispone de una información bastante extensa sobre una coordenada en donde podemos trabajar. En función de esto podemos definir una cámara con:

lCam = [#x: 0.0, #y: -3.0, #z: 0.0, #xangle: -1.0, #yangle: 1.0, #zangle: 0.0]

Gracias a esto luego podemos recuperar o modificar también los valores de posición u orientación de cualquier objeto o cámara con:

lCam.y = lCam.y+ 5

El siguiente código permite hacer avanzar la cámara al pulsar una tecla:

if keyPressed(126) then

..tV = t3dMovementVector

( 0.0, lCam.yangle, 0.0, 0.3 )

lCam.x = lCam.x + tV[1]

lCam.z = lCam.z + tV[3]

end if

O bien accediendo directamente a las propiedades del objeto:

if keyPressed(123) then lCam.yangle = (lCam.yangle + 5)mod 360

if keyPressed(124) then lCam.yangle = (lCam.yangle +355) mod 360

Asimismo se puede controlar la posición y orientación de cualquier objeto en la escena utilizando las mismas técnicas y accediendo directamente a las propiedades del objeto definidas como:

* pX -- posicion x

* pY -