/****************************************************************************
*                txttest.c
*
*  This module implements "fill-in-the-blank" pre-programmed texture 
*  functions for easy modification and testing. Create new textures here.
*
*  from Persistence of Vision(tm) Ray Tracer
*  Copyright 1996 Persistence of Vision Team
*---------------------------------------------------------------------------
*  NOTICE: This source code file is provided so that patterns may experiment
*  with enhancements to POV-Ray and to port the software to platforms other 
*  than those supported by the POV-Ray Team.  There are strict rules under
*  which you are permitted to use this file.  The rules are in the file
*  named POVLEGAL.DOC which should be distributed with this file. If 
*  POVLEGAL.DOC is not available or for more info please contact the POV-Ray
*  Team Coordinator by leaving a message in CompuServe's Graphics Developer's
*  Forum.  The latest version of POV-Ray may be found there as well.
*
* This program is based on the popular DKB raytracer version 2.12.
* DKBTrace was originally written by David K. Buck.
* DKBTrace Ver 2.0-2.12 were written by David K. Buck & Aaron A. Collins.
*
*****************************************************************************/

/*
 * Some texture ideas garnered from SIGGRAPH '85 Volume 19 Number 3,
 * "An Image Synthesizer" By Ken Perlin.
 *
 * Further Ideas Garnered from "The RenderMan Companion" (Addison Wesley)
 */

#include "frame.h"
#include "vector.h"
#include "povproto.h"
#include "texture.h"
#include "povray.h"    /* [DB 9/94] */
#include "txttest.h"   /* [DB 9/94] */
#include "pattern.h"   /* [CY 10/94] */



/*****************************************************************************
* Local preprocessor defines
******************************************************************************/



/*****************************************************************************
* Local typedefs
******************************************************************************/



/*****************************************************************************
* Local variables
******************************************************************************/



/*****************************************************************************
* Static functions
******************************************************************************/



/*
 * Test new textures in the routines that follow.
 */

/*****************************************************************************
*
* FUNCTION
*
*   pattern1
*
* INPUT
*   
* OUTPUT
*   
* RETURNS
*   
* AUTHOR
*
*   POV-Ray Team
*   
* DESCRIPTION
*
*   The pattern routines take an x,y,z point on an object and a pointer to
*   the object's texture description and return the color at that point
*   Similar routines are granite, agate, marble. See txtcolor.c for examples.
*
* CHANGES
*
******************************************************************************/

DBL pattern1 (EPoint, TPat)
VECTOR EPoint;
TPATTERN *TPat;
{
  DBL value;
  /* YOUR NAME HERE */

  TPat=TPat;

  value = Noise(EPoint);

  return(value);

}



/*****************************************************************************
*
* FUNCTION
*
*   pattern2
*
* INPUT
*   
* OUTPUT
*   
* RETURNS
*   
* AUTHOR
*
*   POV-Ray Team
*   
* DESCRIPTION
*
*   The pattern routines take an x,y,z point on an object and a pointer to
*   the object's texture description and return the color at that point
*   Similar routines are granite, agate, marble. See txtcolor.c for examples.
*
* CHANGES
*
******************************************************************************/

DBL pattern2 (EPoint, TPat)
VECTOR EPoint;
TPATTERN *TPat;
{
  DBL value;
  /* YOUR NAME HERE */
  TPat=TPat;

  value = Noise(EPoint);

  return(value);

}




/*****************************************************************************
*
* FUNCTION
*
*   pattern3
*
* INPUT
*   
* OUTPUT
*   
* RETURNS
*   
* AUTHOR
*
*   POV-Ray Team
*   
* DESCRIPTION
*
*   The pattern routines take an x,y,z point on an object and a pointer to
*   the object's texture description and return the color at that point
*   Similar routines are granite, agate, marble. See txtcolor.c for examples.
*
* CHANGES
*
******************************************************************************/

DBL pattern3 (EPoint, TPat)
VECTOR EPoint;
TPATTERN *TPat;
{
  DBL value;
  /* YOUR NAME HERE */
  TPat=TPat;

  value = Noise(EPoint);

  return(value);

}



/*****************************************************************************
*
* FUNCTION
*
*   bumpy1
*
* INPUT
*   
* OUTPUT
*   
* RETURNS
*   
* AUTHOR
*
*   POV-Ray Team
*   
* DESCRIPTION
*
*   The bumpy routines take a point on an object,  a pointer to the
*   object's texture description and the surface normal at that point and
*   return a peturb surface normal to create the illusion that the surface
*   has been displaced.
*
*   Similar routines are ripples, dents, bumps. See txtbump.c for examples.
*
* CHANGES
*
******************************************************************************/

void bumpy1 (EPoint, Tnormal, normal)
VECTOR EPoint;
TNORMAL *Tnormal;
VECTOR normal;
{
  /* YOUR NAME HERE */
  EPoint=EPoint;

  Tnormal = Tnormal;

  Assign_Vector(normal, normal);
}



/*****************************************************************************
*
* FUNCTION
*
*   bumpy2
*
* INPUT
*   
* OUTPUT
*   
* RETURNS
*   
* AUTHOR
*
*   POV-Ray Team
*   
* DESCRIPTION
*
*   The bumpy routines take a point on an object,  a pointer to the
*   object's texture description and the surface normal at that point and
*   return a peturb surface normal to create the illusion that the surface
*   has been displaced.
*
*   Similar routines are ripples, dents, bumps. See txtbump.c for examples.
*
* CHANGES
*
******************************************************************************/

void bumpy2 (EPoint, Tnormal, normal)
VECTOR EPoint;
TNORMAL *Tnormal;
VECTOR normal;
{
  /* YOUR NAME HERE */
  EPoint=EPoint;

  Tnormal = Tnormal;

  Assign_Vector(normal, normal);
}



/*****************************************************************************
*
* FUNCTION
*
*   bumpy3
*
* INPUT
*   
* OUTPUT
*   
* RETURNS
*   
* AUTHOR
*
*   POV-Ray Team
*   
* DESCRIPTION
*
*   The bumpy routines take a point on an object,  a pointer to the
*   object's texture description and the surface normal at that point and
*   return a peturb surface normal to create the illusion that the surface
*   has been displaced.
*
*   Similar routines are ripples, dents, bumps. See txtbump.c for examples.
*
* CHANGES
*
******************************************************************************/

void bumpy3 (EPoint, Tnormal, normal)
VECTOR EPoint;
TNORMAL *Tnormal;
VECTOR normal;
{
  /* YOUR NAME HERE */
  EPoint=EPoint;

  Tnormal = Tnormal;

  Assign_Vector(normal, normal);
}
