// Persistence Of Vision raytracer version 3.0 sample file.
// Texture warp example

#version 3
global_settings { assumed_gamma 2.2 }

#include "colors.inc"

camera { 
  location <0,3,-31>
  direction 3*z
} 

plane {  y,-1.01  pigment {checker Yellow,White}}

plane {  z, 4.01  pigment {checker Yellow,White}}

light_source { <300, 500, -500> color Gray65}
light_source { <-50,  10, -500> color Gray65}

#declare Thing = plane{z,0.1 clipped_by{box{-2,2}}}
#declare Test = pigment{image_map{gif "test.gif"} translate -1/2 scale 4}

object{Thing
  pigment { Test

//This is the traditional non-warp turbulence in the X direction only
    turbulence 0.4*x octaves 2  

// followed by a rotate left 90 degrees.  The result is a rotated image
// with the turbulence rotated with it as see in the upper left
    rotate 90*z
  }
  translate <-3,5.5,0>
}

object{Thing
  pigment { Test
// Here we rotate first, then do X turbulence.  However the upper
//  right image shows that traditional POV-Ray syntax always transforms
//  the turbulence with the pattern, regardless of the order specified.

    rotate 90*z
    turbulence 0.4*x octaves 2
  }
  translate <3,5.5,0>
}

object{Thing
  pigment { Test
// Here we do the rotation first
    rotate 90*z

// and then do the turbulence in a new warp statement.  The results in the 
// lower left are what we wanted all along.
    warp{turbulence 0.4*x octaves 2}
  }
  translate <-3,1,0>
}

object{Thing
  pigment { Test
// This lower right image shows that putting the warp statement first,
//  reverses the order and behaves the same as the upper images.
//  The turbulence is rotated with the pattern.  The results are slightly
//  different than the upper images.  That is because here, the turb happens
//  after the transformations that are inside the declared Test pigment.
    warp{turbulence 0.4*x octaves 2}
    rotate 90*z
  }
  translate <3,1,0>
}
