Lenguaje SCL e Integración con HTML (Web).

Mariano Tejedor Moreno


Para editar código SCL desde el World Editor seleccionaremos SCL -> Edit. El código se ejecuta desde el visualizador Viscape por lo que debemos probar nuestro código sobre este.

Podemos referenciar a los objetos de tres formas:

  1. Por sus nombres dentro de comillas simples.
  2. Por la instrucción me que determina el objeto al cual el código SCL es afectado, es decir, el objeto que contiene el atributo ‘s’ de SCL.
  3. Por su número precedido del símbolo #.

En el ejemplo de la Figura1 podemos ver las tres formas de referirnos a los objetos.


Figura1

La instrucción SCL togvis hace a un objeto visible o invisible, cada vez que esta es ejecutada, pero necesita conocer a que objeto afecta, y debemos pasarle esta información.

Este tipo de información que es dada a la función, es conocido como argumento, y debe estar encerrado entre paréntesis inmediatamente después de la función. El argumento de la instrucción togvis en estos tres casos es un objeto:

  1. me
  2. ‘OtroObjeto’
  3. #2

Una línea de instrucción completa y sus argumentos (si los hay) es conocida como statement o sentencia, y siempre deberá acabar en punto y coma (;). Por ejemplo: togvis (me);

Esta función cambia la visibilidad del objeto me, desde visible a invisible (o desde invisible a visible). El programa entonces finaliza porque no hay más sentencias y el mundo es redibujado, mostrando el efecto del programa.

Cualquiera que haya entrado en la página web oficial de 3D Webmaster (http://vwww.com), habrá podido comprobar la interacción con algunos de los objetos dentro de un mundo virtual, pinchando con el ratón sobre uno de ellos. Por ello para detectar la activación necesitamos usar la instrucción activate, la cual retorna un resultado de acuerdo con la pregunta: ¿El usuario ha pinchado con el ratón sobre el objeto dado (objetoXXX)?. La función activate tiene dos argumentos:

  1. El objeto que debe chequear (el nombre del objeto o su número dentro del mundo).
  2. El método de activación; hay varias formas que pueden activar a un objeto, cada una es representada con un número diferente. 0 indica que el objeto ha sido pinchado con el puntero del ratón. 1-10 indica que el objeto ha colisionado con algún otro objeto en movimiento.

Figura 2

Podemos como en el ejemplo comprobar el resultado de activate usando la instrucción if, que ejecuta la siguiente sentencia si el resultado es verdadero. Un programa SCL no restringe su ámbito, por lo que desde un trozo de código SCL dentro de un objeto podemos referenciar otros objetos e incluso variables de otros objetos, por ejemplo: togvis(‘OtroObjeto’); ‘OtroObjeto’.variable1++;

En ocasiones y dependiendo de la forma de programar de cada uno, en un objeto se introduce todo el código que controla el mundo virtual, es decir, el main, y en otros objeto el código que afecte a este en particular o a sus descendientes; este objeto se suele hacer invisible o suele ser un grupo los cuales no se muestran en el proceso de dibujado pero están "vivos" y ejecutándose igual que los demás.

NOTA: Es muy útil consultar el manual de referencia para saber los prototipos de las funciones, los argumentos que reciben y la funcionalidad o acciones que realizan, pues aquí vamos a repasar brevemente el SCL ya que necesitaríamos varios cursos para explicar su uso. Para acceder debemos desde el World Editor pinchar en el menú Help ->Reference Books…

SUBDIVISION DE EJECUCION DE CODIGO EN FRAMES

Figura3

Podemos usar el SCL para controlar un objeto directamente sobre un número determinado de frames o fotogramas, en lugar de controlarlo nosotros. Usando las funciones waitf y resume, podemos hacer que el código SCL espere o haga una pausa hasta que el siguiente frame haya sido dibujado. EL siguiente programa, que usa la sentencia repeat, ejecuta el trozo de programa encerrado entre llaves un cierto número de veces, en este caso 5, y rota el objeto en el eje Y 5 grados en cada frame, en total 25 grados pero en 5 frames. Esto permite visualizar la rotación suavemente, por ejemplo para simular la apertura de una puerta. La instrucción resume reserva una pila en memoria para almacenar la posición de ejecución de la siguiente sentencia después de cada instrucción waitf (Ver Reference Books…).

En la Figura3 vemos este ejemplo de utilización de estas dos funciones que siempre se usan conjuntamente. Hay otra función que permite esperar un cierto número de frames : waitfs(nº de frames), por ejemplo waitfs(5) esperará 5 fotogramas para ejecutar la siguiente función.

ESTRUCTURAS CONDICIONALES

Para controlar el flujo de los programas en cualquier lenguaje de programación necesitamos un conjunto de estructuras condicionales Figura4. SCL soporta las mismas que el lenguaje ‘C’. A continuación se muestra un ejemplo de uso de cada una de ellas.

OPERADORES DE COMPARACION

TIPOS DE ARGUMENTOS

Figura8
NOTA: Desde la librería Warehouse se pueden añadir al mundo virtual objetos de muy diferentes tipos, en ocasiones muchos de ellos realizan una acción. Al arrastrar estos objetos, el editor nos muestra una caja de diálogo llamada Propiedades (Properties) en la que podemos introducir ciertos valores. Esto automáticamente genera código SCL para ese objeto y en concreto la acción a realizar, digamos que el código está predefinido y solamente cambiamos sus parámetros. Ver Figura8.

INTEGRACION DE MUNDOS VIRTUALES EN EL NAVEGADOR (HTML-WEB)

Una vez que hemos terminado el desarrollo del mundo virtual en 3D, podemos publicarlo en nuestra página web de varias formas, añadiendo simplemente los enlaces o URL’s para saltar a otra página web en 2D o algún otro mundo virtual mediante SCL, o mediante la opción Link del World Editor.

Podemos visualizar nuestro entorno tridimensional en pantalla completa dentro del navegador o integrado en un página web con código HTML.

muy importante: deberá estar instalado en ambos casos el plug-in o conector Viscape para el navegador que usemos ya sea IExplorer 3.xx o Netscape 3.xx o superiores.

Recuadro6

VISUALIZACION DE UN MUNDO VIRTUAL

La forma más simple para visualizar un mundo en cualquiera de los navegadores es usar HTML para enlazar directamente al fichero que hayamos creado, por lo que solamente se muestra el mundo dentro del navegador. Esto nos permite ver nuestro entorno 3D en pantalla completa o "full screen". Veamos como se hace tanto para IExplorer como para Netscape.

<HTML>

Pincha aquí para cargar el <A HREF="mimundo.svr">mundo</A>

</HTML>

Figura9

Otra de las formas para visualizar los mundos es a través de los frames o marcos de los navegadores. En el siguiente ejemplo creamos dos frames. El frame de la izquierda (llamado texto), ocupa un 40% de la ventana del navegador, contiene el fichero texto.htm (que es una sencilla página web), y en el frame derecho (llamado mundo), que ocupa un 60% contiene el fichero mimundo.svr (que es el mundo virtual)

<HTML>

<FRAMESET COLS="40%, 60%">

<FRAME SRC="texto.htm" NAME="texto">

<FRAME SRC="mimundo.svr" NAME="mundo">

</FRAMESET>

</HTML>

Figura10

Finalmente la forma más indicada para mostrar los mundos virtuales a través del navegador es integrandolos en la página. Para hacerlo, necesitamos usar las etiquetas OBJECT para IExplorer y EMBED para Netscape. Veámoslo en el ejemplo:

<HTML>

<OBJECT CLASSID="clsid:1B487523-BEC2-11CF-BF9E-0020AF998FF5"

WIDTH="320" HEIGHT="240" ID="IEmundo">

<PARAM NAME="Mundo" VALUE="mimundo.svr">

</OBJECT>

<EMBED SRC="mimundo.svr" WIDTH="320" HEIGHT="240" NAME="Nmundo">

</HTML>

Figura11

CLASSID debe ser siempre el mismo, es el identificador unico de la clase para VISCAPE. Este ejemplo funcionaría para los dos navegadores, puesto que mientras IExplorer entiende la claúsula OBJECT e ignora la claúsula EMBED, Netscape ignora OBJECT y entiende EMBED.

CREACION DE ENLACES DESDE EL MUNDO VIRTUAL

Hay dos formas de crear enlaces "links" a otras páginas web o a otros mundos:

Mediante la cual añadimos un texto que especifica el enlace, indicándole automáticamente todos los parámetros (aunque se puede crear directamente, es preferible usar esta opción) creándonos un atributo de texto "t" que especifica la información.

Desde el World Editor seleccionaremos en el menú Object-> Link. Esta opción mostrará una caja de diálogo como se muestra en la Figura12 con tres parámetros que se detallan a continuación:

Figura12
Figura13

Los posibles valores para este parámetro son:

  • _blank: Carga la página web en una nueva ventana del navegador._self : Carga la página web sobre la ventana actual del navegador.
  • _parent: Carga la página web sobre el frame anterior a este (si lo hay) del navegador.
  • _top: Carga la página web sobre el frame de nivel superior del navegador.

Como hemos indicado esta opción añade realmente un atributo de texto. Para editar el texto desde el menú del World Editor Object ->Text ->Text…

  • Usando la función de SCL linkto.
Figura 14

Esta instrucción hace lo mismo que el método anterior, pero los parámetros son pasados como argumentos a la función, veamos el prototípo de esta función:

int linkto (char *<URL>, char *<target frame>, int <reserved>);

En la Figura15 hemos introducido código SCL a un objeto y como argumento le hemos dado un enlace ficticio.

Los valores para "target frame" son los mismos que en el apartado anterior para Target. El argumento "reserved" debe ser siempre 0. Para más información consultar el "Reference Books".

Figura 15
Figura16
Figura17

CONSEJO: Cuando un objeto contiene código SCL y además atributo de enlace, se procesará siempre antes de todo el código SCL, por lo que debemos tenerlo en cuenta, y optar por una de las dos formas.

TRUCO: Es importante, para los que queréis aprender más SCL que os bajéis de la red (download) mundos virtuales y editéis el código que viene con ellos, es muy interesante.

TRUCO: En ocasiones os encontrareis mundos virtuales protegidos, que no se pueden editar. Si queréis hacer lo mismo proteger vuestros mundos contra curiosos o piratas, podéis hacerlo desde el menú del World Editor File-> SetPassword.

CONSEJO: El código SCL se puede tracear ("debugger") de tal manera que podemos ejecutar paso a paso cada instrucción de cada objeto y ver lo que hacen en tiempo real desde el World Editor SCL-> Debug Options. Recordad que siempre se ha de probar desde el Viscape.
Figura18
Figura19
Figura20

Bases del concurso ½3D WEBMASTER╗