[Bf-blender-cvs] [1ddeff9999b] soc-2021-simulation-display: Physics: Added basic visualisation for collisions, plus some cleanups to the Forces code
soumya pochiraju
noreply at git.blender.org
Sat Jun 19 19:32:14 CEST 2021
Commit: 1ddeff9999b8fe979eeb760d0ec2795a6b944b47
Author: soumya pochiraju
Date: Sat Jun 19 22:59:17 2021 +0530
Branches: soc-2021-simulation-display
https://developer.blender.org/rB1ddeff9999b8fe979eeb760d0ec2795a6b944b47
Physics: Added basic visualisation for collisions, plus some cleanups to the Forces code
===================================================================
M intern/rigidbody/rb_bullet_api.cpp
M release/datafiles/locale
M release/scripts/addons
M release/scripts/addons_contrib
M release/scripts/startup/bl_ui/properties_physics_rigidbody.py
M source/blender/blenkernel/intern/rigidbody.c
M source/blender/draw/CMakeLists.txt
M source/blender/draw/engines/overlay/overlay_extra.c
M source/blender/draw/engines/overlay/overlay_private.h
M source/blender/draw/engines/overlay/overlay_shader.c
A source/blender/draw/engines/overlay/shaders/collision_display_box_vert.glsl
A source/blender/draw/engines/overlay/shaders/collision_display_cylinder_vert.glsl
M source/blender/makesdna/DNA_rigidbody_types.h
M source/blender/makesrna/intern/rna_rigidbody.c
M source/tools
===================================================================
diff --git a/intern/rigidbody/rb_bullet_api.cpp b/intern/rigidbody/rb_bullet_api.cpp
index 20e104b4b49..62ea7e302a2 100644
--- a/intern/rigidbody/rb_bullet_api.cpp
+++ b/intern/rigidbody/rb_bullet_api.cpp
@@ -274,7 +274,6 @@ void RB_dworld_get_impulse(rbDynamicsWorld *world,
if(fric_flag)
{
copy_v3_btvec3(fric_forces[num_fric_forces], tot_lat_impulse);
- printf("%f %f %f\n", tot_lat_impulse.getX(), tot_lat_impulse.getY(),tot_lat_impulse.getZ());
num_fric_forces++;
}
}
@@ -290,6 +289,23 @@ void RB_dworld_step_simulation(rbDynamicsWorld *world,
float timeSubStep)
{
world->dynamicsWorld->stepSimulation(timeStep, maxSubSteps, timeSubStep);
+ //printf("step\n");
+ int numManifolds = world->dispatcher->getNumManifolds();
+ for (int i = 0; i < numManifolds; i++)
+ {
+ btPersistentManifold* contactManifold = world->dispatcher->getManifoldByIndexInternal(i);
+ const void *obA = contactManifold->getBody0();
+ const void *obB = contactManifold->getBody1();
+ int numContacts = contactManifold->getNumContacts();
+ for (int j = 0; j < numContacts; j++)
+ {
+ btManifoldPoint& pt = contactManifold->getContactPoint(j);
+ if (pt.getAppliedImpulse() > 0.f)
+ {
+ //printf("%d,%f %f %f\n",j,pt.getPositionWorldOnB().getX(), pt.getPositionWorldOnB().getY(), pt.getPositionWorldOnB().getZ());
+ }
+ }
+ }
}
/* Export -------------------------- */
diff --git a/release/datafiles/locale b/release/datafiles/locale
index 4833954c0ac..5ab29b1331d 160000
--- a/release/datafiles/locale
+++ b/release/datafiles/locale
@@ -1 +1 @@
-Subproject commit 4833954c0ac85cc407e1d5a153aa11b1d1823ec0
+Subproject commit 5ab29b1331d2103dae634b987f121c4599459d7f
diff --git a/release/scripts/addons b/release/scripts/addons
index f86f25e6221..437ce51ab70 160000
--- a/release/scripts/addons
+++ b/release/scripts/addons
@@ -1 +1 @@
-Subproject commit f86f25e62217264495d05f116ccb09d575fe9841
+Subproject commit 437ce51ab70d18668b699883299ff82d9ed5f4e7
diff --git a/release/scripts/addons_contrib b/release/scripts/addons_contrib
index 5a82baad9f9..7d78c8a63f2 160000
--- a/release/scripts/addons_contrib
+++ b/release/scripts/addons_contrib
@@ -1 +1 @@
-Subproject commit 5a82baad9f986722104280e8354a4427d8e9eab1
+Subproject commit 7d78c8a63f2f4b146f9327ddc0d567a5921b94ea
diff --git a/release/scripts/startup/bl_ui/properties_physics_rigidbody.py b/release/scripts/startup/bl_ui/properties_physics_rigidbody.py
index 827a7b777fd..058fbc5c295 100644
--- a/release/scripts/startup/bl_ui/properties_physics_rigidbody.py
+++ b/release/scripts/startup/bl_ui/properties_physics_rigidbody.py
@@ -323,6 +323,7 @@ class PHYSICS_PT_rigid_body_display_options(PHYSICS_PT_rigidbody_panel, Panel):
col.prop(rbo, "display_data_text")
col.prop(rbo, "display_acceleration")
col.prop(rbo, "display_velocity")
+ col.prop(rbo, "display_collisions")
class PHYSICS_PT_rigid_body_display_force_types(PHYSICS_PT_rigidbody_panel, Panel):
bl_label = "Forces"
@@ -356,6 +357,7 @@ class PHYSICS_PT_rigid_body_display_force_types(PHYSICS_PT_rigidbody_panel, Pane
col.prop(rbo, "show_effectors_force")
col.prop(rbo, "show_normal_force")
col.prop(rbo, "show_frictional_force")
+ col.prop(rbo, "show_net_force")
classes = (
PHYSICS_PT_rigid_body,
diff --git a/source/blender/blenkernel/intern/rigidbody.c b/source/blender/blenkernel/intern/rigidbody.c
index 2b02127265d..68e7ae3148e 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -2262,7 +2262,6 @@ void BKE_rigidbody_do_simulation(Depsgraph *depsgraph, Scene *scene, float ctime
float cur_interp_val = interp_step;
for (int i = 0; i < rbw->substeps_per_frame; i++) {
- printf("substep%d\n",i);
rigidbody_update_kinematic_obj_substep(&substep_targets, cur_interp_val);
RB_dworld_step_simulation(rbw->shared->physics_world, substep, 0, substep);
cur_interp_val += interp_step;
@@ -2274,8 +2273,11 @@ void BKE_rigidbody_do_simulation(Depsgraph *depsgraph, Scene *scene, float ctime
Object *ob = rbw->objects[j];
if(ob->rigidbody_object != NULL){
rbRigidBody *rbo = (rbRigidBody*)(ob->rigidbody_object->shared->physics_object);
- int norm_flag = (ob->rigidbody_object->display_force_types & RB_SIM_NORMAL);
- int fric_flag = (ob->rigidbody_object->display_force_types & RB_SIM_FRICTION);
+ int norm_flag = (ob->rigidbody_object->display_force_types & RB_SIM_NORMAL) ||
+ (ob->rigidbody_object->display_force_types & RB_SIM_NET_FORCE) ||
+ (ob->rigidbody_object->sim_display_options & RB_SIM_COLLISIONS);
+ int fric_flag = (ob->rigidbody_object->display_force_types & RB_SIM_FRICTION) ||
+ (ob->rigidbody_object->display_force_types & RB_SIM_NET_FORCE);
if(norm_flag || fric_flag){
RB_dworld_get_impulse(rbw->shared->physics_world, rbo ,substep, norm_forces, fric_forces, vec_locations, norm_flag, fric_flag);
copy_v3_v3(ob->rigidbody_object->vec_locations[0].vector,vec_locations[0]);
diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 388613dfb80..075ad9dd789 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -381,6 +381,8 @@ data_to_c_simple(engines/overlay/shaders/armature_wire_frag.glsl SRC)
data_to_c_simple(engines/overlay/shaders/armature_wire_vert.glsl SRC)
data_to_c_simple(engines/overlay/shaders/background_frag.glsl SRC)
data_to_c_simple(engines/overlay/shaders/clipbound_vert.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/collision_display_box_vert.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/collision_display_cylinder_vert.glsl SRC)
data_to_c_simple(engines/overlay/shaders/depth_only_vert.glsl SRC)
data_to_c_simple(engines/overlay/shaders/edit_curve_handle_geom.glsl SRC)
data_to_c_simple(engines/overlay/shaders/edit_curve_handle_vert.glsl SRC)
diff --git a/source/blender/draw/engines/overlay/overlay_extra.c b/source/blender/draw/engines/overlay/overlay_extra.c
index 4cbfbeccd6c..b7ddd98c52c 100644
--- a/source/blender/draw/engines/overlay/overlay_extra.c
+++ b/source/blender/draw/engines/overlay/overlay_extra.c
@@ -364,7 +364,8 @@ static void OVERLAY_bounds(OVERLAY_ExtraCallBuffers *cb,
Object *ob,
const float *color,
char boundtype,
- bool around_origin)
+ bool around_origin,
+ float mat[4][4])
{
float center[3], size[3], tmp[4][4], final_mat[4][4];
BoundBox bb_local;
@@ -441,25 +442,27 @@ static void OVERLAY_bounds(OVERLAY_ExtraCallBuffers *cb,
DRW_buffer_add_entry(cb->empty_capsule_body, color, final_mat);
break;
}
+ if(mat != NULL)
+ copy_m4_m4(mat,tmp);
}
static void OVERLAY_collision(OVERLAY_ExtraCallBuffers *cb, Object *ob, const float *color)
{
switch (ob->rigidbody_object->shape) {
case RB_SHAPE_BOX:
- OVERLAY_bounds(cb, ob, color, OB_BOUND_BOX, true);
+ OVERLAY_bounds(cb, ob, color, OB_BOUND_BOX, true, NULL);
break;
case RB_SHAPE_SPHERE:
- OVERLAY_bounds(cb, ob, color, OB_BOUND_SPHERE, true);
+ OVERLAY_bounds(cb, ob, color, OB_BOUND_SPHERE, true, NULL);
break;
case RB_SHAPE_CONE:
- OVERLAY_bounds(cb, ob, color, OB_BOUND_CONE, true);
+ OVERLAY_bounds(cb, ob, color, OB_BOUND_CONE, true, NULL);
break;
case RB_SHAPE_CYLINDER:
- OVERLAY_bounds(cb, ob, color, OB_BOUND_CYLINDER, true);
+ OVERLAY_bounds(cb, ob, color, OB_BOUND_CYLINDER, true, NULL);
break;
case RB_SHAPE_CAPSULE:
- OVERLAY_bounds(cb, ob, color, OB_BOUND_CAPSULE, true);
+ OVERLAY_bounds(cb, ob, color, OB_BOUND_CAPSULE, true, NULL);
break;
}
}
@@ -1566,6 +1569,9 @@ static void OVERLAY_object_name(Object *ob, int theme_id)
static void scale_vec_by_magnitude(float vector[3], float min_clamp, float scale, float pos[3])
{
+ /* Vectors as scaled by multiplying by Scale and then adding "min_clamp"
+ * Vectors are only drawn if they are greater than 0
+ * Otherwise zero vectors will be drawn with magnitude = min_clamp". */
float min_clamp_vec[3];
float vec_len = len_v3(vector);
normalize_v3(vector);
@@ -1591,7 +1597,7 @@ static void OVERLAY_vector_extra(OVERLAY_Data *data, float vector[3], float pos[
scale_vec_by_magnitude(vector_head_pos, min_clamp, scale, pos);
GPUShader *sh = OVERLAY_shader_vector();
- DRWShadingGroup *grp = DRW_shgroup_create(sh, data->psl->extra_ps[0]);
+ DRWShadingGroup *grp = DRW_shgroup_create(sh, data->psl->extra_ps[1]);
DRW_shgroup_uniform_vec3_copy(grp, "objPosition", pos);
DRW_shgroup_uniform_vec3_copy(grp, "vector", vector);
DRW_shgroup_uniform_float_copy(grp, "scale", scale);
@@ -1599,6 +1605,7 @@ static void OVERLAY_vector_extra(OVERLAY_Data *data, float vector[3], float pos[
DRW_shgroup_uniform_vec3_copy(grp, "colour", color);
DRW_shgroup_call_procedural_lines(grp, NULL, 3);
+ /* Draw magnitude of vector as text */
if(text_flag)
{
struct DRWTextStore *dt = DRW_text_cache_ensure();
@@ -1621,23 +1628,28 @@ static void OVERLAY_forces_extra(OVERLAY_Data *data,
float scale = 0.05f;
float min_clamp = 2.0f;
float vector[3] = {0.0f};
- float color1[3] = {1.0,0.0,1.0};
- float color2[3] = {0.0,1.0,0.5};
- float color3[3] = {1.0,1.0,0.0};
-
- float net_force[3];
- copy_v3_v3(net_force, scene->physics_settings.gravity);
- mul_v3_fl(net_force, rbo->mass);
- for(int i=0; i<3; i++){
- add_v3_v3(net_force, rbo->eff_forces[i].vector);
- add_v3_v3(net_force, rbo->norm_forces[i].vector);
- }
+ float color1[3] = {1.0,0.0,1.0}; /* Pink. */
+ float color2[3] = {0.0,1.0,0.5}; /* Cyan. */
+ float color3[3] = {1.0,1.0,0.0}; /* Yellow. */
int text_flag = rbo->sim_display_
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list