|
|
|
|
|
|
| |
| |
|
|
|
|
| |
| |
|
|
I want to be able to tie a variable to the clock value, but only for
certain portions.
For example, the variable should be equal to 0 before the clock is 0.3,
and equal to one after the clock is equal to 0.6. In between 0.3 and 0.6
the clock should interpolate from 0 to 1.
How would I do this using a macro? Thanks.
Mike
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Mike Horvath <mik### [at] gmailcom> wrote:
> I want to be able to tie a variable to the clock value, but only for
> certain portions.
>
> For example, the variable should be equal to 0 before the clock is 0.3,
> and equal to one after the clock is equal to 0.6. In between 0.3 and 0.6
> the clock should interpolate from 0 to 1.
>
> How would I do this using a macro? Thanks.
>
>
> Mike
#version 3.7;
global_settings {assumed_gamma 1.0}
#declare epsilon = 1e-6;
#declare Frames = 100;
#for (N, 1, Frames)
#switch (N)
#range (0, 0.3)
#declare Clock = 0;
#break
#range (0.3, 0.6)
#declare Clock = (n-0.3)*(1/0.3);
#break
#range (0.6, 1.0)
#declare Clock = 1;
#break
#else
// Do nothing
#end // end switch - case/range - break
#debug concat ("Variable = ", str (Clock, 1, 3), "\n")
#end
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
You have both a lowercase 'n' and a uppercase 'N'. Is that intentional?
On 7/17/2018 6:10 PM, Bald Eagle wrote:
> #switch (N)
>
> #range (0, 0.3)
> #declare Clock = 0;
> #break
>
> #range (0.3, 0.6)
> #declare Clock = (n-0.3)*(1/0.3);
> #break
>
> #range (0.6, 1.0)
> #declare Clock = 1;
> #break
>
> #else
> // Do nothing
> #end // end switch - case/range - break
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Mike Horvath <mik### [at] gmailcom> wrote:
> You have both a lowercase 'n' and a uppercase 'N'. Is that intentional?
Whoops - no, I was ... multitasking.
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
On 07/17/2018 05:36 PM, Mike Horvath wrote:
> I want to be able to tie a variable to the clock value, but only for
> certain portions.
>
> For example, the variable should be equal to 0 before the clock is 0.3,
> and equal to one after the clock is equal to 0.6. In between 0.3 and 0.6
> the clock should interpolate from 0 to 1.
>
> How would I do this using a macro? Thanks.
>
>
> Mike
This might be the single most common thing I do in my anim.
I never hardcode 0.3 in the code. Because you will likely want to tweak
it [1] and here you only have to change it in one place.
#declare Start=0.3;
#declare End = 0.6;
#switch (myclock)
#range (0,Start)
#declare Out=0;
#break
#range(Start, End)
#declare Out=AniSegment(Start,End);
#break
#range(End,1)
#declare Out=1;
#break
#end
///////////////////////////////////////////////////////////////////////////////////////////////////
// Animate this segment of the clock from 0 to 1
#macro AniSegment(_start, _end)
((myclock-_start)/(_end-_start))
#end
Additionally, I like to add acceleration/deceleration to the move. So:
#range(Start, End)
#local F=AniSegment(Start,End);
#declare Out=Curve0(F);
#break
where
#declare pi2=(pi*2);
///////////////////////////////////////////////////////////////////////////////////////////////////
// Curves: see http://www.buckosoft.com/~dick/pov/curves/
#macro Curve0(_i)
(0.5-(cos(_i/2*pi2)/2))
#end
[1] This smells like you really want
#declare Start=1/3;
#declare End=2/3;
--
dik
Rendered 328976 of 330000 (99%)
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
I was able to figure it out. Here's the completed macro:
#macro get_time(tim_beg, tim_end)
#local time_adj = -1;
#switch (clock)
#range (0, tim_beg)
#local time_adj = 0;
#break
#range (tim_beg, tim_end)
#local t1 = clock - tim_beg;
#local t2 = tim_end - tim_beg;
#local time_adj = t1/t2;
#break
#range (tim_end, 1)
#local time_adj = 1;
#break
#else
// Do nothing
#break
#end
time_adj
#end
I will probably use this a lot if I continue to make animations.
:)
Mike
On 7/17/2018 6:50 PM, Bald Eagle wrote:
> Mike Horvath <mik### [at] gmailcom> wrote:
>> You have both a lowercase 'n' and a uppercase 'N'. Is that intentional?
>
> Whoops - no, I was ... multitasking.
>
>
>
>
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Changing the speed is a neat idea!
Mike
On 7/17/2018 8:08 PM, dick balaska wrote:
> On 07/17/2018 05:36 PM, Mike Horvath wrote:
>> I want to be able to tie a variable to the clock value, but only for
>> certain portions.
>>
>> For example, the variable should be equal to 0 before the clock is 0.3,
>> and equal to one after the clock is equal to 0.6. In between 0.3 and 0.6
>> the clock should interpolate from 0 to 1.
>>
>> How would I do this using a macro? Thanks.
>>
>>
>> Mike
>
> This might be the single most common thing I do in my anim.
>
> I never hardcode 0.3 in the code. Because you will likely want to tweak
> it [1] and here you only have to change it in one place.
>
> #declare Start=0.3;
> #declare End = 0.6;
>
> #switch (myclock)
> #range (0,Start)
> #declare Out=0;
> #break
> #range(Start, End)
> #declare Out=AniSegment(Start,End);
> #break
> #range(End,1)
> #declare Out=1;
> #break
> #end
>
>
///////////////////////////////////////////////////////////////////////////////////////////////////
> // Animate this segment of the clock from 0 to 1
> #macro AniSegment(_start, _end)
> ((myclock-_start)/(_end-_start))
> #end
>
>
> Additionally, I like to add acceleration/deceleration to the move. So:
> #range(Start, End)
> #local F=AniSegment(Start,End);
> #declare Out=Curve0(F);
> #break
>
> where
>
> #declare pi2=(pi*2);
>
>
///////////////////////////////////////////////////////////////////////////////////////////////////
> // Curves: see http://www.buckosoft.com/~dick/pov/curves/
> #macro Curve0(_i)
> (0.5-(cos(_i/2*pi2)/2))
> #end
>
>
> [1] This smells like you really want
> #declare Start=1/3;
> #declare End=2/3;
>
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Le 17/07/2018 à 23:36, Mike Horvath a écrit :
> I want to be able to tie a variable to the clock value, but only for
> certain portions.
>
> For example, the variable should be equal to 0 before the clock is 0.3,
> and equal to one after the clock is equal to 0.6. In between 0.3 and 0.6
> the clock should interpolate from 0 to 1.
>
> How would I do this using a macro? Thanks.
>
>
> Mike
I saw the answers with macro, and you asked for macro, but you could
have used a linear spline instead.
#declare Spline = spline { linear_spline
0, 0,
0.3, 0,
0.6, 1,
1, 1
};
#declare Variable = Spline(clock).x ;
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Le_Forgeron <jgr### [at] freefr> wrote:
> I saw the answers with macro, and you asked for macro, but you could
> have used a linear spline instead.
>
> #declare Spline = spline { linear_spline
> 0, 0,
> 0.3, 0,
> 0.6, 1,
> 1, 1
> };
>
> #declare Variable = Spline(clock).x ;
Jerome:
This is VERY nice and elegant.
I figured it could be done with a spline, but I don't often use them and just
wanted to help solve the problem with a quick answer - but this is much better!
:)
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Am 19.07.2018 um 00:39 schrieb Bald Eagle:
> Le_Forgeron <jgr### [at] freefr> wrote:
>
>> I saw the answers with macro, and you asked for macro, but you could
>> have used a linear spline instead.
>>
>> #declare Spline = spline { linear_spline
>> 0, 0,
>> 0.3, 0,
>> 0.6, 1,
>> 1, 1
>> };
>>
>> #declare Variable = Spline(clock).x ;
>
> Jerome:
> This is VERY nice and elegant.
> I figured it could be done with a spline, but I don't often use them and just
> wanted to help solve the problem with a quick answer - but this is much better!
I agree. The spline-based approach also has the added benefit that it
can be used to smoothly speed up and slow down some movement, by using
non-linear splines.
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
|
|