Logo POVRay...
Instrucciones para "RTSP.inc" v1.0

Donación de Rafael Angel Campos Vargas, en el año 2017, a la Biblioteca de objetos de POV-Ray.  Este proyecto se encuentra actualmente suscrito a la patente LGPL;  para libre uso comercial y no comercial del software.

CC-GNU LGPL
The primary purpose of this collection is to make items publicly available under a common license that permits use, modification and re-distribution. To support this contributions are donated to the collection with consent for their use under the terms of the Creative Commons - Lesser General Purpose License (CC-GNU LGPL).
Chris Bartlett 2007

La versión actual v1.0 de "RTSP.inc" (RompecabezasTodasSusPiezas) dibuja un tradicional juego de rompecabezas de tamaño e imagen variable, sus piezas pueden ubicarse a gusto del usuario pero por defecoto se dibujará con todas las piezas en su lugar. Es muy poco flexible. Es compatible con POVRay 3.1.

La imagen que se suministra corresponde a un juego comercial que nosotros programamos, los interesados pueden encontrarlo en el sitio nudosiniciales.juegosenlazaruscostarricenses.com

Indice de página:

  1. Instalación de Archivos
  2. Instrucciones básicas
  3. Características del objeto
  4. Modificadores
  5. Notas y Advertencias
  6. Sugerencias de modificación
  7. Sobre LibreN3D

Instalación de Archivos

El procedimiento siguiente es completamente optativo, corresponde simplemente al estándard de la Biblioteca de objetos POV-Ray.
  1. Cree el subdirectorio "ObjectCollections".  Se sugiere un subdirectorio del folder POV-Ray, creado por el instalador en algunas versiones en la sección de documentos o bien en la de código.
  2. Copie los archivos "RTSP.inc" y "RTSP_IM1.gif" en dicho subdirectorio;  únicamente estos dos son necesarios.  En cuanto a la documentación y demás puede colocarla si desea en el mismo subdirectorio, el estándar ha sido diseñado para evitar problemas de compatibilidad.
  3. Actualice los archivos buscados por POV-Ray, en algún archivo ini pertinente.  Por ejemplo "POVRay.ini";  agregue el comando Library_Path="C:\FDOS\POVRAY31\ObjectCollections"; o el que corresponda a su sistema operativo.  POV-Ray ofrece muchas formas de realizar esto.  Si no sabe cómo, probablemente convenga leer el manual de referencia en la sección "Command-line options".   Cada sistema operativo presenta sus propias variantes.
Nota:  El archivo de prueba "RTSP.pov" puede ejecutarse sin ningún proceso de instalación.  Unicamente debería estar ubicado en el mismo folder que "RTSP.inc" y "RTSP_IM1.gif".


Instrucciones básicas

Rompecabezas
El proceso de dibujo requiere llamar a dos macros, una primera de inicialización y luego el dibujo propiamente dicho. Se separó en dos etapas para permitir que el usuario realice algunos cambios antes del dibujo final. El siguiente ejemplo ilustra el procedimiento básico.

    #if ( version >= 3.7 )
      #version 3.7;
    #end
    global_settings { assumed_gamma 1.0 }  

    #include "stdinc.inc"
    #include "stdcam.inc"
    #include "RTSP.inc"
    
    RTSP_InicializarRompecabezas( "RTSP_IM1.gif", <0.240,0.180,0.001>, 0.15, 0.50 )

    object      {
      RTSP_RompecabezasTodasSusPiezas( )  
      translate                     <-1.925, 1.66,-4.8 >    
    }

La macro de inicializacón tiene cuatro parámetros.

    #macro RTSP_InicializarRompecabezas( NombreImagen, VectorContenedor, 
				DensidadPiezas, FactorCorte )
NombreImagen :
Archivo de imagen GIF que contiene la imagen a dibujar en el rompecabezas.
VectorContenedor :
El rompecabezas estará contenido en un prisma rectangular centrado en el origen con estas dimensiones. Además se le agregará una ligera perturbación aleatoria. Interprete como {AnchoImagen,AltoImagen,GruesoCarton}. La imagen mira en dirección Z-.
DensidadPiezas :
Fracción propia para número de piezas. Utilice 0.0 para dos piezas en la dimensión menor y 1.0 para unas treinta piezas en la dimensión mayor.
FactorCorte :
Fracción propia para aumentar la separación entre imagenes sucesivas con un fondo de textura base. Esto es un efecto artificial, pero resulta útil para percibir la separación de las piezas.

Una vez inicializado, el usuario puede realizar algunas modificaciones o ninguna. Luego, debería llamar a una de las dos macros de dibujo. La siguiente macro dibuja todas las piezas.

    #macro RTSP_RompecabezasTodasSusPiezas() 	

Esta otra variante dibuja una única pieza.

    #macro RTSP_RompecabezasUnaPieza( C, D, BanderaUbicar )
C :
Número de fila de la pieza de abajo hacia arriba a partir de cero.
D :
Número de columna de la pieza de izquierda a derecha a partir de cero.
BanderaUbicar :
off ubica la pieza casi centrada en el origen sin desplazamientos ni efectos aleatorios de posición. Utilice on para dibujar la pieza en posición, determinada por los arreglos de ubicación y parámetros de perturbación.

En el siguiente ejemplo dibujamos dos copias de la misma pieza una sin ubicar y otra en posición.

    #if ( version >= 3.7 )
      #version 3.7;
    #end
    global_settings { assumed_gamma 1.0 }  

    #include "stdinc.inc"
    #include "stdcam.inc"
    #include "RTSP.inc"
    
    RTSP_InicializarRompecabezas( "RTSP_IM1.gif", <0.240,0.180,0.001>, 0.15, 0.50 )

    union           {
      RTSP_RompecabezasUnaPieza( 0,0, true )  
      RTSP_RompecabezasUnaPieza( 0,0, false )  
      translate                     <-1.925, 1.66,-4.8 >    
    }


Características del objeto

El rompecabezas sin modicar se encuentra completamente contenido en el interior de un box centrado en el origen de dimensiones dadas por el parámetro VectorContenedor. La imagen mira en dirección Z-, y la parte inferior de la imagen apunta hacia Y-. Tome en cuenta que sino se desactivan, se agregarán algunas perturbaciones aleatorias que aumentarán ligeramente su tamaño.

Se generan las siguientes declaraciones que no deberían modificarse.  Para su correcta utilización consultar la sección Modificadores.

RTSP_DefaultTexturaInferior
Textura por defecto para la base de cartón del rompecabezas.
RTSP_Filas
Total de filas del rompecabezas luego de la inicialización.
RTSP_Columnas
Total de columnas del rompecabezas luego de la inicialización.
RTSP_Aleatorio
Se trata de un array[2*RTSP_Filas+1][2*RTSP_Columnas+1] bidimensional de los valores aleatorios 2D que se utilizarán en el diseño del rompecabezas. Se genera en la inicialización.


Modificadores

La siguiente es la lista de los modificadores permitidos en la unidad. Para asegurarse de su efectiva aplicación debería redefinirlos antes de la inicialización y posterior a la inclusión del archivo. Los modificadores RTSP_GiroPiezas y RTSP_PosicionPiezas se generan durante la inicialización y deberán modificarse necesariamente después de la misma.
    #declare RTSP_GiroPiezas			= array [RTSP_Filas][RTSP_Columnas]
Arreglo de vectores 3D completamente nulo a la salida de la inicialización. No incluye los pequeños efectos de perturbación aleatoria que se agregarán adicionalmente antes de aplicar estos giros. El usuario puede modificarla para agregar el giro que desee. Los giro así definidos se aplican antes de la traslación.

    #declare RTSP_PosicionPiezas		= array [RTSP_Filas][RTSP_Columnas]
Arreglo de vectores 3D generado como salida de la inicialización. Define las posiciones de las piezas como si las mismas fueran prismas homogénos ubicadas relativo a su centro geométrico. Puede modificar estas posiciones a conveniencia. Considere que si las modificaciones son muchas, quizá sea mejor dibujar las piezas individualmente.

    #declare RTSP_PerturbacionAngular 		= 2;
Ángulo de perturbación (se multiplica por una variable aleatoria), para ubicar las piezas. Puede utilizar 0.0 para ningún efecto. Es admisible utilizar un vector 3D.

    #declare RTSP_PerturbaciónPosición		= 0.05;
Fracción propia para intensidad de perturbación de la posición de las piezas en su lugar. Esta perturbación aplica en dos dimensiones.

    #declare RTSP_PerturbacionEsquina		= 0.2;
Fracción propia para intensidad de desplazamiento en las esquinas de forma aleatoria. Para piezas de forma homogénea debería anular este y RTSP_FactorDesplazarInterior.

    #declare RTSP_FactorDesplazarInterior	= 0.1;
Fracción propia para intensidad de desplazamiento de los centros de las muescas de agarre de las piezas. Para piezas de forma homogénea debería anular este y RTSP_PerturbacionEsquina.

    #declare RTSP_FactorPerturbacionTexturaInferior		= 0.1;
Fracción propia para perturbar la textura inferior de la base, con el objetivo que resulte más simple percibir las piezas por la parte posterior del rompecabezas. Utilice 0.0 para textura homogénea.

    #declare RTSP_FactorCizalla			= 0.05;
Fracción propia pequeña para agregar una cizalla a los bordes de imagen, lo que puede aumentar su brillo característico en los bordes.

    #declare RTSP_FactorPapel			= 0.05; 
Fracción propia del tamaño del papel relativo al grueso Z del rompecabezas.

    #declare RTSP_FactorCorteInferior 		= -0.75;
Fracción relativa al corte superior. Mide la separación entre piezas adyacentes. Un valor negativo sirve para eliminar espacios vacíos que surgen por la aleatoriedad, pero puede ser positivo o cero.

    #declare RTSP_DefaultSemilla		= 2100;
Valor semilla que se utilizará para generar los efectos aleatorios. Tomar en cuenta que afecta únicamente la inicialización, luego ya no se volverá a llamar al generador de números aleatorios.

    #declare RTSP_AplicarNormalImagen		= on;
on aplica RTSP_NormalImagen a la textura de imagen impresa, off lo desactiva.

    #declare RTSP_NormalImagen 			= normal { ... }
Normal a aplicar a la textura de imagen si activa.

    #declare RTSP_AplicarFinishImagen		= on;
on aplica RTSP_FinishImagen a la textura de imagen impresa, off lo desactiva.

    #declare RTSP_FinishImagen 			= finish { ... }
Finish a aplicar a la textura de imagen si activa.

    #declare RTSP_TexturaSobre 			= texture { pigment { rgbf 1.0 } } 
Textura que se aplica en capa sobre la textura de imagen. Por defecto es una capa transparente. Puede ser útil para envejecer u otros efectos similares.

    #declare RTSP_TexturaInferior 		= 
		texture { RTSP_DefaultTexturaInferior } 
Textura inferior a aplicar a la base del rompecabezas. En la inicialización la textura se corrige aplicando el tamaño de imagen.

El siguiente ejemplo ilustra como cambiar la posición de las piezas y algo de su apariencia. Elimina la perturbación aleatoria de posición.

    #if ( version >= 3.7 )
      #version 3.7;
    #end
    global_settings { assumed_gamma 1.0 }  

    #include "stdinc.inc"
    #include "stdcam.inc"
    #include "RTSP.inc"
    
    #declare RTSP_AplicarNormalImagen   = off;
    #declare RTSP_AplicarFinishImagen   = off;
    #declare RTSP_PerturbacionAngular   = 0.0;
    #declare RTSP_PerturbacionPosicion  = 0.0;

    RTSP_InicializarRompecabezas( "RTSP_IM1.gif", <0.240,0.180,0.001>, 0.15, 0.50 )

    #declare RTSP_GiroPiezas[0][0]      = 90*x;
    #declare RTSP_PosicionPiezas[1][1]  = RTSP_PosicionPiezas[1][1]-0.003*z;  

    object           				{
      RTSP_RompecabezasTodasSusPiezas( )  
      translate                     <-1.925, 1.66,-4.8 >    
    }

En este otro ejemplo creamos piezas de forma similar y textura irregular.

    #if ( version >= 3.7 )
      #version 3.7;
    #end
    global_settings { assumed_gamma 1.0 }  

    #include "stdinc.inc"
    #include "stdcam.inc"
    #include "RTSP.inc"                                
    #include "textures.inc"                        
    
    #declare RTSP_DefaultSemilla        = 10000;     
    #declare RTSP_FactorPerturbacionEsquina             = 0.0;
    #declare RTSP_FactorDesplazarInterior               = 0.0;     
    #declare RTSP_FactorPerturbacionTexturaInferior     = 0.0;
    #declare RTSP_FactorCorteInferior   = 0.0; 
    #declare RTSP_FactorCizalla         = 0.1;
    #declare RTSP_FactorPapel           = 0.5;     
    #declare RTSP_TexturaInferior       = texture { pigment { gradient y scale 0.1 } }               
    #declare RTSP_NormalImagen          = normal { granite } 
    #declare RTSP_FinishImagen          = finish { phong 0.9 phong_size 20 }
    #declare RTSP_TexturaSobre          = texture { pigment { rgb Red transmit 0.9 } }

    RTSP_InicializarRompecabezas( "RTSP_IM1.gif", <0.240,0.180,0.001>, 0.0, 1.0 )  
        
    object                          {
      RTSP_RompecabezasTodasSusPiezas( )  
      translate                     <-1.925, 1.66,-4.8 >    
    }


Notas y Advertencias

Aplique los modificadores antes de la inicialización pero luego de la inclusión del archivo para estar seguro que harán efecto. Únicamente deberá modificar RTSP_GiroPiezas y RTSP_PosicionPiezas después de la inicialización.

Para tener piezas de la misma forma anule RTSP_FactorPerturbacionEsquina y RTSP_FactorDesplazarInterior.

Para desaparecer la perturbación aleatorio de la posición anule RTSP_PerturbacionAngular y RTSP_PerturbacionPosicion. Otro método es asignar false el parámetro BanderaUbicar, y utilizar RTSP_PosicionPiezas para ubicar individualmente las fichas.


Sugerencias de modificación


Sobre LibreN3D

Algo hace falta En la actualidad dedico casi unas dos horas todos los días, para desarrollar el programa de animación LibreN3D con el compilador FreePascal para FreeDOS.  El objetivo era en un origen, realizar animaciones de "baja" calidad, con progreso lento y paulatino. Desconocía en ese entonces del programa POV-Ray.  Creo que con ayuda de dicho proyecto, podría lograr mucho mejores resultados desde un principio.  Confío que para el 2020 pueda lograr animaciones completas de aceptable calidad.   En la actualidad, intento agregarle características elásticas a los objetos.  He tenido numerosos retrasos, así que todavía no funciona.  Lo siento...(29/diciembre/2016), pero me siento muy seguro de que pronto lo lograré.  De momento, no tiene interface con el usuario, pero se encuentra en desarrollo como intérprete de renglón al estilo DOS.

Me sería de muchísima ayuda, que el grupo POV-Ray siguiera desarrollando la versión para DOS.   Los siguientes son enlaces que podrían ser de utilidad para el interesado en los proyectos FreePascal y FreeDOS.   Lamentablemente en la actualidad son altamente inestables, debido probablemente a dificultades con la adaptación al modo de 64 bits.
Logo FreeDOS...
Descarga sistema operativo FreeDOS
Logo FreePascal...
Descarga compilador FreePascal