[Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35755] trunk/blender/source/blender/ editors/physics/physics_fluid.c: Further fix for parented fluidsim objects

Janne Karhu jhkarh at gmail.com
Fri Mar 25 09:45:05 CET 2011


Oh, thanks for the tip! I always thought it didn't correct for +-360  
degrees, but looks like it does, great!

On Thu, 24 Mar 2011 23:51:29 +0200, Campbell Barton <ideasman42 at gmail.com>  
wrote:

> mat4_to_compatible_eulO should be able to do this (rather then own
> function continuous_rotation).
>
> On Thu, Mar 24, 2011 at 5:15 PM, Janne Karhu <jhkarh at gmail.com> wrote:
>> Revision: 35755
>>          
>>  http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35755
>> Author:   jhk
>> Date:     2011-03-24 17:15:43 +0000 (Thu, 24 Mar 2011)
>> Log Message:
>> -----------
>> Further fix for parented fluidsim objects
>> * The rotation values determined from ob->obmat have to be continuous  
>> as fluidsim interpolates between these values internally.
>>
>> Modified Paths:
>> --------------
>>    trunk/blender/source/blender/editors/physics/physics_fluid.c
>>
>> Modified: trunk/blender/source/blender/editors/physics/physics_fluid.c
>> ===================================================================
>> --- trunk/blender/source/blender/editors/physics/physics_fluid.c        
>>  2011-03-24 14:31:58 UTC (rev 35754)
>> +++ trunk/blender/source/blender/editors/physics/physics_fluid.c        
>>  2011-03-24 17:15:43 UTC (rev 35755)
>> @@ -349,6 +349,16 @@
>>        }
>>  }
>>
>> +static void continuous_rotation(float *rot, const float *old_rot)
>> +{
>> +       *rot += (int)(*old_rot/360.f)*360.f;
>> +
>> +       if(*old_rot - *rot > 180.f)
>> +               *rot += 360.f;
>> +       else if(*old_rot - *rot < -180.f)
>> +               *rot -= 360.f;
>> +}
>> +
>>  static void fluid_init_all_channels(bContext *C, Object  
>> *UNUSED(fsDomain), FluidsimSettings *domainSettings, FluidAnimChannels  
>> *channels, ListBase *fobjects)
>>  {
>>        Scene *scene = CTX_data_scene(C);
>> @@ -451,8 +461,14 @@
>>                        /* init euler rotation values and convert to  
>> elbeem format */
>>                        /* get the rotation from ob->obmat rather than  
>> ob->rot to account for parent animations */
>>                        mat4_to_eul(rot_d, ob->obmat);
>> -                       mul_v3_fl(rot_d, 180.f/M_PI);
>> -                       sub_v3_v3v3(rot_d, rot_360, rot_d);
>> +                       mul_v3_fl(rot_d, -180.f/M_PI);
>> +                       if(i) {
>> +                               /* the rotation values have to be  
>> continuous, so compare with previous rotation and adjust accordingly */
>> +                               /* note: the unfortunate side effect of  
>> this is that it filters out rotations of over 180 degrees/frame */
>> +                               continuous_rotation(rot_d,  
>> fobj->Rotation + 4*(i-1));
>> +                               continuous_rotation(rot_d+1,  
>> fobj->Rotation + 4*(i-1)+1);
>> +                               continuous_rotation(rot_d+2,  
>> fobj->Rotation + 4*(i-1)+2);
>> +                       }
>>
>>                        set_channel(fobj->Translation, timeAtFrame,  
>> ob->loc, i, CHANNEL_VEC);
>>                        set_channel(fobj->Rotation, timeAtFrame, rot_d,  
>> i, CHANNEL_VEC);
>>
>> _______________________________________________
>> Bf-blender-cvs mailing list
>> Bf-blender-cvs at blender.org
>> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
>>
>
>


More information about the Bf-committers mailing list