sábado, 21 de febrero de 2009

Instalación de SunFlow

Requisitos

Java: Como Sunflow es un programa desarrolado en Java, necesitamos tener instalado Java para ejecutarlo. Se necesitara

Recomendaciones: Se conseguirá el mejor rendimiento con Java 6 y Servidor de VM.

Sunflow funcionará mucho más rápido con el servidor VM (Maquina Virtual). Este servidor es parte de la máquina virtual de Java, pero no esta incluido en el estándar (JRE) de instalación de Java. El servidor VM arranca más despacio y utiliza más memoria de la máquina virtual, pero corre mucho más rápido en muchos casos.
La forma más fácil de obtener el servidor VM es instalar el Java Development Kit (JDK).

Instalación: Después de descargar la versión binaria de Sunflow, sólo descomprimir el archivo en un directorio de su elección.
Antes de ejecutar Sunflow.jar es necesario pasar algunos parámetros a Java, con el fin de aumentar el rendimiento. Para lograr esto debemos crear un archivo por lotes o secuencia de comandos.

En Windows - Creación de un archivo por lotes para iniciar Sunflow

Asegúrese de saber donde está instalado el JDK. Por defecto, este será algo así como
c:\archivos_de_programas\java\jdk1.6.0

Ahora abrimos el Bloc de notas o el editor de texto de su elección y pegue el siguiente texto:

@set javadir="c:\program files\java\jdk1.6.0"
@set mem=1G
@%javadir%\bin\java -Xmx%mem% -server -jar sunflow.jar %*
@if %errorlevel% neq 0 pause

Seguro qué deberemos cambiar la parte que está con negrita, poner la ruta de la instalación de Java.

Explicación:

• La primera línea establece una variable con la ruta de acceso al directorio de instalación del JDK. Asegúrese de que no hay espacio al final de la línea, o antes de que el signo de igualdad.

• La segunda línea establece la cantidad máxima de memoria disponible para Sunflow. Sunflow utilizara mucha, este marca el limite superior. Java predeterminada para este valor el uso de 64 MB, lo cual no es suficiente para utilizar SunFlow, Podemos asignar valores como 512 MB, 1G, 2G todo depende de la memoria que tengamos en nuestra computadora. Sunflow mostrará una advertencia si se le dan menos de 800 MB.

• La tercera línea ejecuta los parámetros necesarios de Sunflow, así como cualquier parámetro adicional que se haya especificado en la línea de comandos.
Si realmente desea ejecutar Sunflow sin el servidor VM, es necesario eliminar el Server o sea el archivo de extensión .bat. Sunflow mostrará una advertencia si se inicia sin usar el servidor VM.

• La última línea de los controles nos da la opción y muestra un mensaje para pulsar cualquier tecla, si algo salió mal.

Guardar este archivo con el nombre sunflow.bat al directorio donde se descomprimido Sunflow.
Ya podemos empezar a utilizar Sunflow

Solución de problemas

Mensajes de error más comunes

The system cannot find the path specified. El camino de la instalación de Java es erróneo, compruebe de nuevo. Asegúrese de que no hay espacio después del signo de igualdad en esa línea de sunflow.bat

'......' is not recognized as an internal or external command, operable program or batch file. Hay probablemente un error en sunflow.bat o un espacio adicional al final de la línea donde se define el camino de instalación de java.

Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.


Si obtiene un mensaje como este, la configuración de la memoria en sunflow.bat es demasiada alta.

Error: no `server' JVM at `c:\program files\java\jre1.6.0\bin\server\jvm.dll'. Este mensaje de error significa que el servidor VM no fue encontrada.
Esto generalmente significa que el camino que ha especificado no está apuntando a una instalación JDK, o que usted no ha instalado el servidor VM.
Compruebe de nuevo el camino, asegúrese de que ha instalado el JDK, o si realmente desea ejecutar el servidor sin VM, eliminar el Server de parámetro sunflow.bat

Que Es SunFlow





Sunflow es un sistema de renderización de código abierto para la foto-síntesis de imágenes realistas. Está escrito en Java y construido alrededor de un núcleo flexible de trazado de rayos y una extensible de diseño orientado a objetos.

Podemos descargar el programa Original de la página oficial Sun Flow.

http://sunflow.sourceforge.net/index.php?pg=down


Pantalla de Structure Synth


Al ejecutar StructureSynth.exe nos saldrá la siguiente pantalla



La Pantalla Principal Presenta los Siguientes Elementos:

  1. Cuadro de Comandos: Aquí encontramos varios botones o comandos como ser

File: Desde donde podemos guarda, abrir nuestro proyecto y cerrar la aplicación.

Edit: Desde aquí podemos cortar, copiar y pegar a nuestra pantalla.

Render: Funciones de Renderizado.

Examples: Ejemplos que tiene cargado el Programa.

Help: Ayuda o preguntas frecuentes de cómo usar Structure.

  1. EisenScript Code: Así se denomina al código que utilizamos para crear las estructuras .Es aquí donde debemos escribir el Código EisenScript, es donde creamos nuestra figura.

  1. Salida del Grafico: Por aquí tendremos los resultados visibles de la creación de nuestra estructura 3D. Siempre debemos hacer click sobre el boton Reset View que se encuentra en el comando general, para ejecutar el código escrito. Aquí podemos girar nuestra estructura 360º respecto de todos los ejes.

  1. Cuadro de Dialogo: Esta pantalla es por donde el programa se comunica con nosotros, el cual nos puede avisar si hemos cometido un error de sintaxis o si hemos agregado un carácter de manera incorrecta. Nos muestra los errores cometidos al escribir el codigo EisenScript.

lunes, 16 de febrero de 2009

Ejemplos de Figuras en Structure Synth

Aqui dejo un par de Ejemplo de Codigo EisenScript en Structure Synth y su salida por pantalla.
EisenScript asi se llama el codigo que es utilizado por Structure Synth para crear los objetos.

set maxdepth 8

R1

rule R1 {

{ rx 0 } R2

{ x 1.5 y 1.5 z 1.5 s 0.5 } R1

{ x 1.5 y 1.5 z -0.5 s 0.5} R1

{ x -0.5 y 1.5 z 1.5 s 0.5} R1

{ x -0.5 y 1.5 z -0.5 s 0.5} R1

}

rule R2 {

{ x 0 y 1 z 0 s 0.25 2.25 0.25 } box // top

{ x 0 y 0 z 1 s 0.25 0.25 2.25 } box // top

{ x 0 y 1 z 2 s 0.25 2.25 0.25 } box // top

{ x 0 y 2 z 1 s 0.25 0.25 2.25 } box // top

{ x 1 y 0 z 0 s 2.25 0.25 0.25 } box //vertical

{ x 1 y 2 z 0 s 2.25 0.25 0.25 } box //vertical

{ x 1 y 2 z 2 s 2.25 0.25 0.25 } box //vertical

{ x 1 y 0 z 2 s 2.25 0.25 0.25 } box //vertical

{ x 2 y 1 z 0 s 0.25 2.25 0.25 } box // bottom

{ x 2 y 0 z 1 s 0.25 0.25 2.25 } box // bottom

{ x 2 y 1 z 2 s 0.25 2.25 0.25 } box // bottom

{ x 2 y 2 z 1 s 0.25 0.25 2.25 } box // bottom

}


set maxdepth 100

r1
36 * { x -2 ry 25 } r1
rule r1 maxdepth 10 {
2 * { y -1 } 3 * { rz 15 x 1 b 0.9 h -20 } r2
{ y 1 h 12 a 0.9 rx 36 } r1
}
rule r2 {
{ s 0.9 0.1 1.1 hue 10 } box // a comment
}
rule r2 w 2 {
{ hue 113 sat 10 a 23 s 0.1 0.9 1.1 } box
}


set maxdepth 15

branch

rule branch {
{ y 1 x -0.5 s 0.707 rz 45 ry -90 } branch
{ y 1 x 0.5 s 0.707 rz -45 ry -90 } branch
box
}


Acciones

Bueno ahora veremos algunas acciones que se le pueden aplicar a las reglas (rule)

Criterios de terminación
set maxdepth [integer]: El parámetro [integer] delimita la cantidad de iteraciones o un criterio de paro. Esto servirá también como un límite superior de recursión para todas las reglas.
set maxobjects [integer]: El parámetro [integer] delimita el número de objetos dibujados en la pantalla para todas las reglas.

Otros Criterios para aplicar a la pantalla

set seed [integer]: Esto hace posible reproducir creaciones.

set background [color]: Permite configurar el color de fondo. En [color] va el color que le queremos aplicar al fondo de la pantalla. Los colores son especificados como cadenas de texto, usando el estándar HTML, pero también podemos asignar el color poniendo el nombres como por ejemplo, red o green o lightgoldenrodyellow). Tabla de colores HTML.

Modificadores de Reglas

md / maxdepth [integer]: Establece el máximo de recursion de la regla. La regla no ejecutará ninguna acción después del límite establecido en [integer] ha alcanzado.

w / weight [float]: Si hay varias reglas que se definen con el mismo nombre, como las reglas (rule) son elegidas al azar, con el parametro especificado en [float] se define la prioridad de la regla. Si no se especifica la prioridad, el valor por defecto es de 1.

Ahora veremos el ejemplo de un tubo en donde se define una regla con el mismo nombre.

Codigo

set maxobjects 52200 // se define el maximo numero de objetos para todas las reglas

set maxdepth 5000 // se define el maximo de recursion para todas las reglas

set background #2f2f4f // se define el color de fondo de la pantalla



{ b 0.9 color #0a0 sat 0.5 } r1 //se define la variable r1 con sus parametros

rule r1 w 10 // se define r1 como rule y se le da prioridad 10 sobre las otras

{

{ rz 15 h 1 s 1.01 0.99 1 y 1 h 4 } r1 //se estable otra regla de r1

r2 // se llama la regla r2

}

rule r1

{

{ rx 10 s 0.99 1.01 1 z 1 s 0.99 } r1 //se estable otra regla de r1

r2 // se llama la regla r2

}

rule r2 {

box // caja

{ s 1.1 0.2 0.2 color #000 } box // se le dan parametro y color a la caja

grid // caja de alambre

}


Con este codigo se da origen a la siguiente imagen



Publicado por VILURON, Nolberto Ismael.

domingo, 15 de febrero de 2009

Rule (reglas), Para que sirve y Como se aplica

Como objetivo principal debemos definir rule (en español regla) y para que sirve .

Las Reglas o Rule nos sirve para la creación de estructuras complejas y sofisticadas. Los rules se definen a través de una variable y pueden ser usado para cualquiera de las Primitivas de Dibujo. El aspecto más importante de los rules, es que son capaces de llamarse a sí mismas.

Esto quiere decir es que son recurrentes osea se repiten n veces, por lo que deben tener una condición de paro. Sin embargo Structure Synth tiene por defecto 1000 recurrencias máximas.

Bueno ahora veremos en una porción de código como se implementa un rule y como es su gráfica

R1 // se crea la variable R1
rule R1  // R1 es de tipo rule, es la regla a cumplir 
{
{ x 0.9 rz 6 ry 6 s 0.99 sat 0.99 } R1 // se asigna a R1 la función especifica, se define R1
{ s 2} sphere // se le aplica una primitiva de dibujo a la regla 
}

Los corchetes me delimitan el bloque de ejecución de la regla y los // es un comentario que no forma parte del codigo

La salida de esta porción de código sera como un espiral. Ahora crearemos algo menos estático agregando algo de aleatoriedad.
Código

R1

rule R1 {
{ x 0.9 rz 6 ry 6 s 0.99 sat 0.99 } R1
{ s 2 } sphere
}

rule R1 {
{ x 0.9 rz -6 ry 6 s 0.99 sat 0.99 } R1
{ s 2 } sphere
}


La Salida sera la siguiente



Esto se logra mediante la creación de múltiples definiciones de la misma regla. En este código la regla R1 tiene dos definiciones o funciones. Ahora, cuando el constructor de Structure Synth tiene que llamar a rule R1, se elige una de las definiciones al azar. Por eso es que se obtiene ese resultado.

Publicado por VILURON, Nolberto Ismael

Darle color a las Primitivas y armar una figura

Esta vez empezaremos por el ejemplo y a partir de este explicare que es y qué hace cada componente.

Código

{ x 7 s 2 color #5F9F9F alpha 0.8 } box
4 * { x 1 hue 215 } 4 * { y 1 sat 0,8} 4 * { z 1 b 0,9} box


Resultado



Al primer box solamente lo moví siete lugares y redimensiones 2 veces mas que su valor original.
Bueno para armar el cubo grande aplicamos la función de iteración sobre los tres ejes a un box y nos queda esta matriz de cubos. Bueno ahora las instrucciones nuevas son hue, sat, b, color y alpha. Las cuales nos producen transformaciones de color sobre los objetos.
h / hue [float]: Este cambia la matiz del elemento. En [float] se coloca el valor de la tonalidad para cambiar el color, las matices se miden de 0 a 360 la cual tiene una propiedad cíclica es decir, un tono de 400 es igual a un tono de 40.
sat [float]: Establece la saturación de color. En [float] se coloca el valor de la saturación que solamente tiene un rango de 0 a 1 ( los valores más grandes que 1 se establece en 1).

b / brightness [float]: Da brillo al elemento. El Brillo se mide en un intervalo de 0 a 1 .
color [color]: Este comando establece el color de un elemento. En [color] va el color que le queremos aplicar. Los colores son especificados como cadenas de texto, usando el estándar HTML, pero también podemos asignar el color poniendo el nombres como por ejemplo, red o green o lightgoldenrodyellow). Tabla de colores HTML.

a / alpha [float]: Este comando nos muestra la trasparencia de un elemento se mide en un intervalo de 0 a 1 . Un valor alpha de cero es totalmente transparente, y un valor alpha de uno es completamente opaca.
Publicado por VILURON, Nolberto Ismael

sábado, 14 de febrero de 2009

Usando Structure Synth - Parte 3

Bien ya hemos tenido una introducción de que es Structure Synth y para que sirve, de como nos podemos mover en los ejes coordenados y hasta como rotar los ejes, pero ahora veremos algo de mucha importancia las Primitivas de dibujo.

Las primitivas de dibujo son los elementos básicos de los que disponemos para realizar cualquier representación gráfica, entre ella se encuentran los siguientes

box caja Solida

grid Caja de Alambre

sphere Esfera (este primitivo tiene algunos problemas, por ejemplo los elipsoides no están funcionando)

line a lo largo del eje x, centrado en y, y plano en el eje z.

point centrado en el sistema de coordenadas

triangle Crea un polígono personalizado. Especificar las coordenadas de la siguiente manera: Triángulo [0,0,0, 1,0,0; 0.5,0.5,0.5]

mesh Prototipo de Malla.

cylinder Cilindro el eje de simetría será el actual eje x. [No se ha aplicado]

tube Tubo [No se ha aplicado].

Mostradas en la siguiente figura




Cabe destacar que la primitiva triangle es una figura en el plano como una plancha de acero por eso es que no apreciamos su volumen.

Bueno teniendo en cuenta las primitivas de dibujo ahora veremos como podemos agrandar o achicar estas figura con una sentencia, que le aplicamos a cada objeto.

Redimensionar las Primitivas de Dibujo
s [float] Redimensiona al elemento que se le aplica. Siempre aumentando el mismo tamaño para los 3 ejes coordenados.

s [f1] [f2] [f3] Redimensiona las coordenadas del elemento. Como en el caso anterior pero con escala separada para cada eje coordenado.

Bueno aquí veremos un ejemplos practico y como nos quedarian las primitivas redimensionadas

box
{ x 4 s 2 9 4 } box
{ z 2 } sphere
{ z 4 s 3} sphere

Bueno aquí tenemos la primera caja en el origen, la segunda caja la hemos desplazado 4 lugares sobre el eje x , y la hemos redimensionado 2 veces mas sobre el eje x , 9 sobre el eje y, 4 sobre el eje z. Después tenemos la esfera que la hemos desplazado 2 lugares al eje z, y la segunda esfera que la redimensionamos 3 veces mas que la original y desplazado 4 lugares sobre el eje z.
Publicado por VILURON, Nolberto Ismael.

Usando Structure Synth - Parte 2

Seguiremos aprendiendo structure ahora veremos una función muy buena para hacer una linea en el espacio llamada iteración, esto se hace posible usando el símbolo de la multiplicación por ejemplo 3 * { x 2} box que seria igual a la creación de tres acciones como ser

{ x 2} box
{ x 4} box
{ x 6} box

Ahora veremos un ejemplo sencillo para realizar el Eje de Coordenadas en el espacio

box
10 * { x 1} box // se repiten 10 cajas seguidas sobre el ejes de las x
10 * { y 1} box
10 * { z 1} box




Funciones de rotación de los elementos sobre los ejes.

rx [float]: Rotación alrededor del eje x. [float] esto especifica que debemos colocar un numero flotante para que se realice la rotación, este argumento es el ángulo especificado en grados. En la rotación los elementos giran al rededor del eje los grados que uno especifique.

ry [float]: Rotación alrededor del eje y. Como en el caso anterior.


rz [float]: Rotación alrededor del eje z. Como en el caso anterior.

Ahora veremos 2 Ejemplos practicos

1. Rotacion Normal sobre cualquiera de los ejes: esto quiere decir que los cubos rotan alrededor del eje determinado, en este caso el eje x como se ve en la siguiente figura.

7 * { x 1 rx 20} box

En este caso son siete cubos a una distancia de una unidad por la función de iteración que rotan 19 grados sobre el eje de las x cada uno.

2. Rotación de un eje con los cubos sobre el centro: Esto quiere decir que se empieza a rotar un eje sobre el primer cubo, y después se vuelve a rotar el eje sobre ese punto en el segundo cubo y así sucesivamente hasta terminar. Esto se refleja en la siguiente figura

box
19 * { x 1 ry 20} box
19 * { y 1 rz 20} box
19 * { z 1 rx 20} box

En este ejemplo se toman 19 cubos seguidos en cada eje desplazado por una unidad. Después sobre cada eje se rota 20 grados un eje contrario, por lo cual nos queda una circunferencia sobre cada eje debido a que la rotación se da sobre el eje, en donde se rota el eje 20 grados y a partir de esta rotación se rota de nuevo 20 grados mas, en donde cada cubo se mantiene sobre el centro del eje.

Publicado por VILURON, Nolberto Ismael

Empezando a Usar Structure Synth - Parte 1

Este es un ejemplo de estructura que podemos llegar a hacer con esta aplicación, todo ello a partir de una serie de reglas de tipo matemático-lógicas.

De esta forma, este programa está perfectamente indicado para la generación de figuras geométricas complejas, como es el caso de los fractales.
Bueno empezaremos con algunos ejemplos sencillos de como usar structure:

x [float]: Esta instrucción representa la translación sobre el eje x. [float] nos quiere decir que acepta números flotante como ser 0,5, y también enteros como por ejemplo 2.
Ejemplo: {x 4} esto dice que a partir del punto de coordenadas (0,0,0) (origen de coordenadas) se desplace 4 lugares sobre el eje de las x.

y [float]: Como en el caso anterior solamente que se desplaza sobre el eje de las y.

z [float]: Como en el caso anterior solamente que se desplaza sobre el eje de las z.

Ahora veremos un ejemplo practico

box
{ x 8} box
{ y 3} box
{ z 5} box

En donde la sentencia box nos representa una caja. Si esta no tiene ningún desplazamiento se graficara en el origen en cambio las otras tres están desplazadas sobre los ejes como se puede notar en la imagen.
Se debe aclarar que los desplazamientos siempre deben estar entre corchetes {} lo cual nos denota un bloque de ejecución esto es igual que en c++ debido a que gran parte de structure synth esta desarrollado en este lenguaje.


Publicado por VILURON, Nolberto Ismael

jueves, 12 de febrero de 2009

Que Es Structure Synth

Structure Synth es una aplicación para crear estructuras 3D a partir de un conjunto de reglas especificas. Es un intento de hacer una versión en 3D de Contexto Libre.

Está construido en C + +, OpenGL, y Qt 4.3. Desarrollado en actualidad para Windows y Mac, también es posible compilarlo en Linux.

En la actualidad este proyecto se puede usar gratis ya es una aplicación Open Source , pero sigue siendo de calidad beta (aunque es bastante estable, pero no todas las características planeadas se han completado). El progreso y consideraciones de diseño se pueden observar en Syntopia blog.


Podemos crear estructuras magnificas con este programa el cual lo podemos descargar de la pagina oficial Structure Synth.


http://structuresynth.sourceforge.net/download.php


O aquí dejo un enlace de Megaupload para descargarlo directamente


http://www.megaupload.com/?d=YGAS1DDM


Una vez descargado, el programa no necesita instalación hay que descomprimir el archivo zip en una carpeta y ejecutar el programa StructureSynth.exe.


Publicado por VILURON, Nolberto Ismael