/************************************************************************* CLOCK MODIFIER INCLUDE FILE FOR PERSISTENCE OF VISION 3.x ************************************************************************** Created by Chris Colefax, 24 June 1997 Updated 7 August 1998: updated for POV-Ray 3.1 See "ClockMod.htm" for more information. *************************************************************************/ // CHECK CLOCK PARAMETERS // ********************** #declare _CM_tempver = version; #version 3.0; #ifndef (clock_type) #declare clock_type = "" #end #ifndef (clock_start) #declare clock_start = 0; #end #ifndef (clock_finish) #declare clock_finish = 1; #end #ifndef (clock_repeat) #declare clock_repeat = 1; #end #ifndef (clock_strength) #declare clock_strength = 1; #end #ifndef (clock_combine) #declare clock_combine = "" #end #ifndef (clock_preview) #declare clock_preview = false; #end #if (clock_start > clock_finish) #warning "clock_start must be less than clock_finish!\n" #declare clock_finish = clock_start; #end #if (clock_repeat <= 0) #warning "clock_repeat must be larger than 0!\n" #declare clock_repeat = 1; #end // DETERMINE CURRENT CLOCK VALUE (UNMODIFIED) // ****************************************** #declare _CM_combine = 2; #while (_CM_combine > 0) #if (_CM_combine = 2) #if (clock_preview = false) #declare mclock = clock; #end #if (mclock <= clock_start) #declare mclock = 0; #else #if (mclock >= clock_finish) #declare mclock = 1; #else #declare mclock = (mclock - clock_start) / (clock_finish - clock_start); #end #end #end // DETERMINE COMBINATION CLOCK TYPE // ******************************** #if (strlen(clock_combine) > 0 & _CM_combine = 2) #declare _CM_type = asc(strupr(clock_combine)); // DETERMINE CLOCK TYPE // ******************** #else #if (strlen(clock_type) = 0) #declare _CM_type = 0; #else #declare _CM_type = asc(strupr(clock_type)); #end #if (mclock > 0 & (mclock < 1 | mod(clock_repeat, 1) != 0)) #declare mclock = mod(mclock * clock_repeat, 1); #end #declare _CM_combine = 0; #end // CALCULATE MODIFIED CLOCK VALUE // ****************************** #if (mclock >= 0) #switch (_CM_type) #case (65) // Accelerate #declare mclock = pow(mclock, 2 * clock_strength); #break #case (68) // Decelerate #declare mclock = pow(mclock, .5 / clock_strength); #break #case (83) // S-Curve #declare mclock = sin((mclock - .5) * pi) / 2 + .5; #break #case (84) // Triangle #declare mclock = (abs(mclock - .5) - .5) * -2; #break #case (74) // Jump #declare mclock = 1 - pow(abs(mclock * 2 - 1), 2 * clock_strength); #break #case (66) // Bounce #declare mclock = 1 - pow(1 - abs(mclock * 2 - 1), 2 * clock_strength); #ifdef (_CM_macro) #declare mclock = 1 - mclock; #end #break #case (79) // Oscillate #declare mclock = sin(mclock * 2 * pi); #break #case (87) // Wave #declare mclock = sin((mclock -.25) * 2 * pi) * .5 + .5; #break #case (82) // Recoil #declare mclock = (mclock < 0.5 ? pow(mclock * 2, .25 / clock_strength) : pow(1 - (mclock * 2 - 1), 4 * clock_strength)); #break #else #declare _CM_type = 76; // Linear #end #end // LOOP FOR COMBINED CLOCK // *********************** #declare _CM_combine = _CM_combine - 1; #end #version _CM_tempver;