[Bf-blender-cvs] [d4f44e67c4d] soc-2021-simulation-display: Fix: Incorrect acceleration. Store velocities of only the last substep, subtract previous velocity from current
soumya pochiraju
noreply at git.blender.org
Wed Aug 18 21:48:25 CEST 2021
Commit: d4f44e67c4da36138f17a7bc16e9af45f59d854d
Author: soumya pochiraju
Date: Wed Aug 18 23:47:53 2021 +0530
Branches: soc-2021-simulation-display
https://developer.blender.org/rBd4f44e67c4da36138f17a7bc16e9af45f59d854d
Fix: Incorrect acceleration. Store velocities of only the last substep, subtract previous velocity from current
===================================================================
M source/blender/blenkernel/intern/rigidbody.c
M source/blender/draw/engines/overlay/overlay_extra.c
===================================================================
diff --git a/source/blender/blenkernel/intern/rigidbody.c b/source/blender/blenkernel/intern/rigidbody.c
index 4912b16833a..5c2daef6997 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -2213,8 +2213,10 @@ static void rigidbody_get_debug_draw_data(RigidBodyWorld *rbw, float substep, bo
if (ob->rigidbody_object != NULL) {
rbRigidBody *rbo = (rbRigidBody *)(ob->rigidbody_object->shared->physics_object);
- if((ob->rigidbody_object->sim_display_options & RB_SIM_VELOCITY) ||
- (ob->rigidbody_object->sim_display_options & RB_SIM_ACCELERATION)) {
+ if(((ob->rigidbody_object->sim_display_options & RB_SIM_VELOCITY) ||
+ (ob->rigidbody_object->sim_display_options & RB_SIM_ACCELERATION)) &&
+ is_last_substep)
+ {
/* Get velocity. */
copy_v3_v3(ob->rigidbody_object->pvel, ob->rigidbody_object->vel);
RB_body_get_linear_velocity(rbo, ob->rigidbody_object->vel);
@@ -2249,8 +2251,14 @@ static void rigidbody_get_debug_draw_data(RigidBodyWorld *rbw, float substep, bo
add_v3_v3(ob->rigidbody_object->fric_forces[k].vector, fric_forces[k]);
}
- if(is_last_substep && fabsf(len_v3(ob->rigidbody_object->norm_forces[k].vector))>0.0f) {
- mul_v3_fl(ob->rigidbody_object->vec_locations[k].vector, (1.0f/(float)(len_v3(ob->rigidbody_object->norm_forces[k].vector))));
+ if(is_last_substep) {
+ if(fabsf(len_v3(ob->rigidbody_object->norm_forces[k].vector))>0.0f) {
+ mul_v3_fl(ob->rigidbody_object->vec_locations[k].vector, (1.0f/(float)(len_v3(ob->rigidbody_object->norm_forces[k].vector))));
+ }
+ else {
+ zero_v3(ob->rigidbody_object->vec_locations[k].vector);
+ }
+
}
}
}
diff --git a/source/blender/draw/engines/overlay/overlay_extra.c b/source/blender/draw/engines/overlay/overlay_extra.c
index 3ae1c0e8b64..09a5d15b0e0 100644
--- a/source/blender/draw/engines/overlay/overlay_extra.c
+++ b/source/blender/draw/engines/overlay/overlay_extra.c
@@ -1793,12 +1793,10 @@ static void OVERLAY_acceleration_extra(OVERLAY_Data *data,
int text_flag = rbo->sim_display_options & RB_SIM_TEXT;
/* Calculate timestep. */
- const float ctime = DEG_get_ctime(depsgraph);
- const float frame_diff = ctime - scene->rigidbody_world->ltime;
- const float timestep = (1.0f / (float)FPS * scene->rigidbody_world->time_scale)/ scene->rigidbody_world->substeps_per_frame;
+ const float timestep = (1.0f / (float)FPS * scene->rigidbody_world->time_scale);
float acc[3];
- sub_v3_v3v3(acc, rbo->pvel, rbo->vel);
+ sub_v3_v3v3(acc, rbo->vel, rbo->pvel);
mul_v3_fl(acc, 1 / timestep);
OVERLAY_vector_extra(data, acc, rbo->pos, scale, min_clamp, color, text_flag);
}
More information about the Bf-blender-cvs
mailing list