Jul 15

Visualizar Texto dentro de objeto (también llamado Prim) dentro de un mundo virtual como Second Life parecería fácil, desafortunadamente no existen funciones que permitan escribir directamente texto sobre un objeto y no existe forma de cargar una textura generada dinamicamente con el contenido texto, tampoco existe una forma de generar la imagen de forma externa y cargarla directamente dentro del objeto; por este motivo mucho del contenido encontrado dentro de los mundos virtuales son imágenes con el texto a visualizar que son generadas con editores de imagen y que son subidas al simulador de Second Life por $10 Lindens cada una, pero afortunadamente existe una forma de visualizar texto dentro de un objeto en Second Life.

Probando Scripts para la Visualizacion de Texto

Algunas Formas :

  • Un letra por Objeto :
    Crear una textura (imagen de 512x512 pixeles) con los caracteres del abacedario a utilizar en la fuente a utilizar, se pueden crear una textura mas grande si el conjunto de letras es muy extenso o varias texturas con diferentes conjuntos de letras, como también se pueden crear texturas por cada fuente a utilizar aunque se recomienda utilizar fuentes donde los caracteres tengan las mismas dimensiones ya que todos aparecerán dentro de objetos del mismo tamaño que conforma el mensaje a utilizar. Luego se debe crear un script que asigne a cada objeto la letra que se quiere visualizar, calculado su posición dentro de la textura y aplicarla al objeto.  Lo malo de esta estrategia es que para mostrar el mensaje "Hola Mundo" se necesitarían diez objetos para la construcción del visor, así que si queremos un tablero de 180 caracteres debemos tener 180 objetos lo cual es una gran cantidad debido a que este recurso es limitado y degrada el desempeño del servidor del mundo virtual.
  • Una Letra por Lado del Objeto :
    Esta estrategia permite colocar varias letras dentro del mismo objeto, esto se logra tomando el objeto cubo que tiene seis caras (en cada cara se puede colocar una textura diferente) y aplanando este, para que por un lado se puedan ver hasta cinco texturas, esto se logra deformando el cubo con las herramientas de edición, una vez que tenemos el cubo podemos colocar un carácter en cada cara, logrando tener un máximo de cinco caracteres por cada objeto, de esta manera podemos colocar el mensaje "Hola Mundo" utilizando dos objetos lo que reduce en una quinta parte el uso de prims y se reduce a una textura con el conjunto de caracteres a visualizar.
  • Varias Letras por Lado del Objeto :
    Otra estrategia a utilizar es colocar dos caracteres por cada cara del objeto, en este caso podríamos obtener diez caracteres y nueva mente reducimos a la mitad el consumo de objetos para la visualización de texto, aunque aumenta el numero de texturas a utilizar ya que debemos crear todas las posibles combinaciones de dos letras lo cual nos demanda una gran cantidad de texturas pero reduciendo el numero de objetos a utilizar. Esta ultima estrategia es la mas usada en la visualización de texto dentro de objetos de SecondLife y de cual existen varios scripts.

Scripts Disponibles en Second Life :

Existen gran cantidad de soluciones para este problema, algunas utilizan mas recursos como prims y scripts lo que puede causar que el rendimiento del simulador se vea afectado (LAG), mientras otras versiones utilizan mas recursos como texturas que no afectan el funcionamiento del simulador pero afectan al cliente, el cual debe descargar gran cantidad de texturas para poder visualizar la información, otro problema adicional es la necesidad de crear nuevas texturas de acuerdo al conjunto de caracteres que se necesitan y aunque los scripts con soporte de UTF mejoran el uso de caracteres especiales, se deben crear las texturas necesarias para su visualización.

Se tomo la decisión de probar XyyyyzText para la creacion basica de los tableros de texto mas adelante se explorara con mas detalle la creación dinámica de texto utilizando otras herramientas. 

Tagged with:



En July 15 de 2010, Marlon J. Manrique escribió acerca de Pulsar Project : Visualizar Texto en un Prim.
Jul 15

Introducción.

Hay un detalle muy simple que debe tenerse en cuenta cuando se ejecutan en el cluster programas escritos en C y C++ con respecto al manejo de los parámetros de línea de comando que recibe el programa.  En estos lenguajes siempre el primer parámetro, es decir argv[0], recibe el nombre y ruta del archivo ejecutable del programa que se está corriendo.  Muchos desarrolladores utilizan este valor para conocer alguna información interesante como el directorio hogar del programa.

En Condor, debido a su arquitectura y método de ejecución de los procesos en los nodos trabajadores, esto tiene una variación que debe ser tenida en cuenta.  El primer parámetro de línea de comando de los trabajos que se ejecutan en el cluster no hará referencia al programa como tal sino al condor_exec quien es el proceso que efectivamente ejecuta el programa en el nodo trabajador.

When Condor starts up your job, it renames argv[0] (which usually contains the name of the program) to condor_exec. This is convenient when examining a machine’s processes with the Unix command ps; the process is easily identified as a Condor job.  Unfortunately, some programs read argv[0] expecting their own program name and get confused if they find something unexpected like condor_exec.
Tomado de la sección 2.15.1 del manual de Condor: Potencial problems, Renaming of argv[0].

Verificación.

Crear el programa de prueba.

$ vi argv0.c
#include <stdio.h>

int main(int argc, char* argv[])
{
 int i = 0;

 printf("\nParameters count: %d.\n\n", argc);

 for(i=0; i<argc; i++)
 {
    printf("\tParameter '%d': %s.\n", i, argv[i]);
 }

 printf("\nDone!\n\n");

 return 0;
}

Compilarlo (de una vez con soporte para el Cluster).

$ condor_compile gcc argv0.c -o argv0

Ejecución local.

$ ./argv0 p1 p2 p3 p4

Condor: Notice: Will checkpoint to ./argv0.ckpt
Condor: Notice: Remote system calls disabled.

Parameters count: 5.

Parameter ’0′: ./argv0.
Parameter ’1′: p1.
Parameter ’2′: p2.
Parameter ’3′: p3.
Parameter ’4′: p4.

Done!

Creación del archivo de envío de trabajos al cluster.

$ vi argv0.submit

executable = argv0
universe   = vanilla
output     = argv0.out
error      = argv0.error
log        = argv0.log
arguments  = p1 p2 p3 p4

Enviar el trabajo al cluster.

$ condor_submit argv0.submit

Verificar la salida estándar del trabajo ejecutado.

$ cat argv0.out

Parameters count: 5.

Parameter ’0′: condor_exec.exe.
Parameter ’1′: p1.
Parameter ’2′: p2.
Parameter ’3′: p3.
Parameter ’4′: p4.

Done!

Tagged with:



En July 15 de 2010, Jorge Iván Meza Martínez escribió acerca de Cuidado sobre el manejo de argv[0] en las aplicaciones escritas en C/C++.