/**************************************************************************** * 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 Raytracer * Copyright 1993 Persistence of Vision Team *--------------------------------------------------------------------------- * NOTICE: This source code file is provided so that users 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" /* Test new textures in the routines that follow */ /* The painted 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. */ void painted1 (x, y, z, Pigment, colour) DBL x, y, z; PIGMENT *Pigment; COLOUR *colour; { /* YOUR NAME HERE */ VECTOR Colour_Vector; if (Options & DEBUGGING) printf ("painted1 %g %g %g\n", x, y, z); DNoise(&Colour_Vector,x,y,z); colour ->Red += Colour_Vector.x; colour ->Green += Colour_Vector.y; colour ->Blue += Colour_Vector.z; return; } void painted2 (x, y, z, Pigment, colour) DBL x, y, z; PIGMENT *Pigment; COLOUR *colour; { int brkindx; COLOUR Colour1, Colour2; /* You could change the parser to take two colors after PAINTED2, */ /* but since the colormap is already parsed it's easier to use it during */ /* testing. If the texture works out right you can change the parser later. */ if (Pigment -> Colour_Map != NULL) { Compute_Colour (&Colour1, Pigment, 0.1); Compute_Colour (&Colour2, Pigment, 0.9); } else { Make_Colour (&Colour1, 1.0, 1.0, 1.0); Colour1.Filter = 0.0; Make_Colour (&Colour2, 0.0, 1.0, 0.0); Colour2.Filter = 0.0; } brkindx = (int) FLOOR(x) + (int) FLOOR(z); if (Options & DEBUGGING) printf ("checker %g %g %g\n", x, y, z); if (brkindx & 1) { colour->Red = Colour1.Red; colour->Green = Colour1.Green; colour->Blue = Colour1.Blue; colour->Filter = Colour1.Filter; } else{ colour->Red = Colour2.Red; colour->Green = Colour2.Green; colour->Blue = Colour2.Blue; colour->Filter = Colour2.Filter; } return; } void painted3 (x, y, z, Pigment, colour) DBL x, y, z; PIGMENT *Pigment; COLOUR *colour; { /* YOUR NAME HERE */ ; } /* 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. */ void bumpy1 (x, y, z, Tnormal, normal) DBL x, y, z; TNORMAL *Tnormal; VECTOR *normal; { /* YOUR NAME HERE */ } void bumpy2 (x, y, z, Tnormal, normal) DBL x, y, z; TNORMAL *Tnormal; VECTOR *normal; { /* YOUR NAME HERE */ ; } void bumpy3 (x, y, z, Tnormal, normal) DBL x, y, z; TNORMAL *Tnormal; VECTOR *normal; { ; }