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

Donación de Rafael Angel Campos Vargas, en junio del 2011, a la Biblioteca de objetos de POV-Ray.  Este proyecto se encuentra actualmente inscrito con 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
Este objeto fue creado originalmente mediante el programa "Blob Sculptor 2.0b".  Lamentablemente la última versión fue en 1994.  Aún así es completamente compatible con FreeDOS y WindowsXP.

Si le interesa obtener una copia del programa, puede buscarla en los siguientes enlaces:
BlobC...
www.rocketjam.com/povmod.html
www.personal.uni-jena.de/~p6sepa/software.htm


La versión actual v1.0 de "LRAV.inc" crea una lagartija de metabolas.  Sin embargo, es algo complicada de utilizar.  El movimiento se logra declarando una matriz de giros de tamaño variable.  Además, se permite la modificación de texturas, mediante redefinición previa al llamado a la macro.  En alguna de sus variantes es compatible con POV-Ray 3.1.

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 el archivo "LRAV.inc" en dicho subdirectorio;  únicamente éste es necesario.  Opcionalmente podría colocar la documentación y demás 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 "LRAV.pov" puede ejecutarse sin ningún proceso de instalación.  Unicamente debería estar ubicado en el mismo folder que "LRAV.inc".


Instrucciones básicas

Lagartija
Muy fácil de usar, tan simple como incluir el archivo y ubicar el objeto.  Se define una versión del objeto en posición basal, mediante macro default.  O bien se permite simular el movimiento, mediante declaración previa de una matriz de giros.

El siguiente ejemplo recurre a la macro default, colocando a la lagartija en posición base.

    #include "stdinc.inc"
    #include "stdcam.inc"
    #include "LRAV.inc"
    
    object      {
      LRAV_LagartijaReptilAnimalVivo()     
      translate <-1.937,1.6375,-4.75>
    }
La macro principal recibe únicamente un parametro.
    #macro LRAV_Lagartija( MyArreglo )
MyArreglo es simplemente un tipo ARRAY bidimensional.  La primera dimensión es variable, y corresponde al total de giros a declarar.  La segunda dimensión contiene entre 4 o cinco campos.
    #declare MyArreglo	= ARRAY [ GirosSolicitados ][ 4/5 ]
    	{
    	  { IdentificadorGiro0, RotarX0, RotarY0, RotarZ0 [, on/off] },
    	  { IdentificadorGiro1, RotarX1, RotarY1, RotarZ1 [, on/off] },
          { IdentificadorGiro2, RotarX2, RotarY2, RotarZ2 [, on/off] }, 
    	  ...
   	} 
GirosSolicitados :
Indica el total de giros a solicitar.  El número es libre con un valor máximo de 55, es decir existen 55 puntos de control.
IdentificadorGiro :
Numero o etiqueta clave que identifica el giro.  Buscar más adelante los giros admisibles.
RotarX :
Indica la rotacion en grados respecto eje X*, este es el mismo eje X luego de aplicar rotación en otros puntos de control.  Las rotaciones se acumulan a partir de la posicion base.
RotarY :
Indica rotacion acumulada respecto eje Y*, este es el eje Y luego de aplicar RotarX.
RotarZ :
Indica rotacion acumulada respecto eje Z*, este es el eje Z luego de aplicar RotarX y RotarY.
[, on/off] :
Parámetro optativo, útil en diseño y animación.  Cuando se indique off, se desactiva el giro.
La siguiente es la lista de los identificadores de giro posible.
Ejes de control del tronco
LRAV_EjeCentral
Ubicado en el centro del tronco.
LRAV_EjeCentralI01
Ubicado atrás de LRAV_EjeCentral.
LRAV_EjeCentralI02
Ubicado atrás de LRAV_EjeCentralI01.
LRAV_EjeCentralI03
Ubicado atrás de LRAV_EjeCentralI02.
LRAV_EjeCentralI04
Ubicado atrás de LRAV_EjeCentralI03.
LRAV_EjeCentralI05
Ubicado atrás de LRAV_EjeCentralI04.
LRAV_EjeCentralI06
Ubicado atrás de LRAV_EjeCentralI05.
LRAV_EjeCentralI07
Ubicado atrás de LRAV_EjeCentralI06.
LRAV_EjeCentralD01
Ubicado delante de LRAV_EjeCentral.
LRAV_EjeCentralD02
Ubicado delante de LRAV_EjeCentralD01.
LRAV_EjeCentralD03
Ubicado delante de LRAV_EjeCentralD02.
LRAV_EjeCentralD04
Ubicado delante de LRAV_EjeCentralD03.
LRAV_EjeCentralD05
Ubicado delante de LRAV_EjeCentralD04.
LRAV_EjeCentralD06
Ubicado delante de LRAV_EjeCentralD05.
LRAV_EjeCentralD07
Ubicado delante de LRAV_EjeCentralD06.
Ejes de control de la cola
LRAV_EjeCola01
Ubicado atrás del tronco.
LRAV_EjeCola02
Ubicado atrás de LRAV_EjeCola01.
LRAV_EjeCola03
Ubicado atrás de LRAV_EjeCola02.
LRAV_EjeCola04
Ubicado atrás de LRAV_EjeCola03.
LRAV_EjeCola05
Ubicado atrás de LRAV_EjeCola04.
LRAV_EjeCola06
Ubicado atrás de LRAV_EjeCola05.
LRAV_EjeCola07
Ubicado atrás de LRAV_EjeCola06.
LRAV_EjeCola08
Ubicado atrás de LRAV_EjeCola07.
LRAV_EjeCola09
Ubicado atrás de LRAV_EjeCola08.
LRAV_EjeCola10
Ubicado atrás de LRAV_EjeCola09.
Ejes de control de la cabeza
LRAV_EjeCabeza01
Ubicado en el cuello.
LRAV_EjeCabeza02
Ubicado delante de LRAV_EjeCabeza01.
Ejes de pata delantera izquierda (z+,x+)
LRAV_EjeAntePataDI
Ubicado a la salida de la pierna en tronco.
LRAV_EjePataDI
Ubicado en la union pierna antepierna.
LRAV_EjeDedoExteriorDI
Ubicado en punto de union del dedo exterior.
LRAV_EjeDedoInteriorDI
Ubicado en punto de union del dedo interior.
LRAV_EjeDedoCentroExteriorDI
Ubicado en punto de union del dedo a la par exterior del dedo central.
LRAV_EjeDedoCentroInteriorDI
Ubicado en punto de union del dedo a la par interior del dedo central.
LRAV_EjeDedoMedioDI
Ubicado en punto de union del dedo medio.
Ejes de pata delantera derecha (z+,x-)
LRAV_EjeAntePataDD
Ubicado a la salida de la pierna en tronco.
LRAV_EjePataDD
Ubicado en la union pierna antepierna.
LRAV_EjeDedoExteriorDD
Ubicado en punto de union del dedo exterior.
LRAV_EjeDedoInteriorDD
Ubicado en punto de union del dedo interior.
LRAV_EjeDedoCentroExteriorDD
Ubicado en punto de union del dedo a la par exterior del dedo central.
LRAV_EjeDedoCentroInteriorDD
Ubicado en punto de union del dedo a la par interior del dedo central.
LRAV_EjeDedoMedioDD
Ubicado en punto de union del dedo medio.
Ejes de pata trasera izquierda (z-,x+)
LRAV_EjeAntePataTI
Ubicado a la salida de la pierna en tronco.
LRAV_EjePataTI
Ubicado en la union pierna antepierna.
LRAV_EjeDedoExteriorTI
Ubicado en punto de union del dedo exterior.
LRAV_EjeDedoInteriorTI
Ubicado en punto de union del dedo interior.
LRAV_EjeDedoCentroExteriorTI
Ubicado en punto de union del dedo a la par exterior del dedo central.
LRAV_EjeDedoCentroInteriorTI
Ubicado en punto de union del dedo a la par interior del dedo central.
LRAV_EjeDedoMedioTI
Ubicado en punto de union del dedo medio.
Ejes de pata trasera derecha (z-,x-)
LRAV_EjeAntePataTD
Ubicado a la salida de la pierna en tronco.
LRAV_EjePataTD
Ubicado en la union pierna antepierna.
LRAV_EjeDedoExteriorTD
Ubicado en punto de union del dedo exterior.
LRAV_EjeDedoInteriorTD
Ubicado en punto de union del dedo interior.
LRAV_EjeDedoCentroExteriorTD
Ubicado en punto de union del dedo a la par exterior del dedo central.
LRAV_EjeDedoCentroInteriorTD
Ubicado en punto de union del dedo a la par interior del dedo central.
LRAV_EjeDedoMedioTD
Ubicado en punto de union del dedo medio.

Un ejemplo sencillo para utilizar la matriz de giro, sería el siguiente:

    #include "stdinc.inc"
    #include "stdcam.inc"
    #include "LRAV.inc"
    
    #declare MyArreglo   = array [ 2 ][ 5 ]
        { { LRAV_EjeCentral, 0, 10, 0, on },
          { LRAV_EjeCola01 , 0,-10, 0, on } } 
          
    object       { 
      LRAV_Lagartija( MyArreglo ) 
      translate <-1.937,1.6375,-4.75>
    }

Características del objeto

Mis dibujos están en unidades L (Lisa).  1 L equivale a 0.055063 pulgadas definido como 0.001 para POVRAY.  La lagartija default tienen las siguientes características:
    LargoTotal               = 1350*L (+400*L -950*L)*z
    ProfundidadTotal         = 180*L  (+ 90*L - 90*L)*y
    Ancho Sin Patas          = 240*L
    Ancho Con Patas          = 550*L
La macro LRAV_LagartijaReptilAnimalVivo() crea el dibujo de una lagartija en estilo 3D, con el centro del tronco en el origen y la cabeza orientada hacia z+.

Se definen las siguientes texturas base, que no deberían modificarse.  Para su correcta modificación consultar la sección Modificadores.

LRAV_TexturaDedo
Define la textura a aplicar en los dedos.
LRAV_TexturaOjo
Define la textura a aplicar en los ojos.
LRAV_TexturaCabeza
Define la textura a aplicar en la cabeza.
LRAV_TexturaTronco
Define la textura a aplicar en el tronco.
LRAV_TexturaCola
Define la textura a aplicar en la cola.
LRAV_TexturaPata
Define la textura a aplicar en la pata.
LRAV_TexturaAntePata
Define la textura a aplicar en la antepierna.

Modificadores

La siguiente es la lista de los modificadores permitidos en la unidad (cuando se indica, son valores default).

    #declare LRAV_Textura2				= off;
Si se activa con "on" produce otra variante de textura.  Debería declararse antes del #include "LRAV.inc".  El dibujo dado de ejemplo utiliza esta variante de textura.

    #declare LRAV_BanderaBoca				= on;
Si se desactiva con "off", no dibuja la boca.  La boca default es sumamente sencilla e inexpresiva.  Este modificador facilitaría su eventual reemplazo.

    #declare LRAV_ColorBoca				= DarkGreen;
Permite modificar el color default de la boca.

    #declare LRAV_DefaultTexturaDedo			= texture {  
      LRAV_TexturaDedo
    }
Define la textura default a aplicar en los dedos.

    #declare LRAV_DefaultTexturaOjo			= texture {  
      LRAV_TexturaOjo
    }
Define la textura default a aplicar en los ojos.

    #declare LRAV_DefaultTexturaCabeza			= texture {  
      LRAV_TexturaCabeza
    }
Define la textura default a aplicar en la cabeza.

    #declare LRAV_DefaultTexturaTronco			= texture {  
      LRAV_TexturaTronco
    }
Define la textura default a aplicar en el tronco.

    #declare LRAV_DefaultTexturaCola			= texture {  
      LRAV_TexturaCola
    }
Define la textura default a aplicar en la cola.

    #declare LRAV_DefaultTexturaPata			= texture {  
      LRAV_TexturaPata
    }
Define la textura default a aplicar en la pata.

    #declare LRAV_DefaultTexturaAntePata		= texture {  
      LRAV_TexturaAntePata
    }
Define la textura default a aplicar en la antepierna.

    #declare LRAV_POV3_1				= off;
Si se activa con "on" produce simplificaciones que permiten su ejecución en la version POVRay 3.1.  En algunas versiones de POVRay se activa automáticamente.

A manera de ejemplo del uso de los modificadores:

    #include "stdinc.inc"
    #include "stdcam.inc"
    #declare LRAV_Textura2      = on;
    #include "LRAV.inc"
    #include "textures.inc"
    
    #declare LRAV_DefaultTexturaDedo    = texture       {
      average
      texture_map       {
        [ 0.5 Rust             ]
        [ 0.5 LRAV_TexturaDedo ]
      }     
    }
    
    #declare MyArreglo   = array [ 2 ][ 4 ]
        { { LRAV_EjeCentral, 0, 10, 0 },
          { LRAV_EjeCola01 , 0,-10, 0 } } 
          
    object       { 
      LRAV_Lagartija( MyArreglo ) 
      translate <-1.937,1.6375,-4.75>
    }

Notas y Advertencias

Se recomienda que en el tronco y la cola se subdivida los giros grandes en varios subgiros pequeños.  Precisamente para ello son "tantos" puntos de control;  pues aumenta la naturalidad del movimiento.

El movimiento de las patas resulta poco realista a corta distancia.  Disminuya el giro de la Pata y aproveche la unión Pata-AntiPata.

Aparte del giro de bloque, la textura del tronco y de la cola no giran solidariamente con la matriz de giros.  Una solución provisional sería agregar un poco de aleatoriedad para confundir la vista.  Por ejemplo, LRAV_DefaultTexturaTronco = texture { LRAV_TexturaTronco rotate 5*rand( S ) }.


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...(23/junio/2011), 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