[Bf-blender-cvs] [5f5b1e51a4b] soc-2021-simulation-display: learnt basic arrow, ui panels

soumya pochiraju noreply at git.blender.org
Mon Jun 14 13:21:25 CEST 2021


Commit: 5f5b1e51a4bb6811ffd0c2df2fd94612877872d2
Author: soumya pochiraju
Date:   Sat Jun 5 18:54:10 2021 +0530
Branches: soc-2021-simulation-display
https://developer.blender.org/rB5f5b1e51a4bb6811ffd0c2df2fd94612877872d2

learnt basic arrow, ui panels

===================================================================

M	intern/rigidbody/rb_bullet_api.cpp
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/vector_vert.glsl
M	source/blender/makesdna/DNA_rigidbody_types.h
M	source/blender/makesrna/intern/rna_rigidbody.c

===================================================================

diff --git a/intern/rigidbody/rb_bullet_api.cpp b/intern/rigidbody/rb_bullet_api.cpp
index daa377a7b55..d932a9ca951 100644
--- a/intern/rigidbody/rb_bullet_api.cpp
+++ b/intern/rigidbody/rb_bullet_api.cpp
@@ -212,6 +212,31 @@ void RB_dworld_step_simulation(rbDynamicsWorld *world,
                                float timeSubStep)
 {
   world->dynamicsWorld->stepSimulation(timeStep, maxSubSteps, timeSubStep);
+
+  int numManifolds = world->dispatcher->getNumManifolds();
+  for (int i = 0; i < numManifolds; i++)
+  {
+      printf("manifold:%d\n",i);
+      btPersistentManifold* contactManifold =  world->dispatcher->getManifoldByIndexInternal(i);
+      const btCollisionObject* obA = contactManifold->getBody0();
+      const btCollisionObject* obB = contactManifold->getBody1();
+
+      int numContacts = contactManifold->getNumContacts();
+      for (int j = 0; j < numContacts; j++)
+      {
+          btManifoldPoint& pt = contactManifold->getContactPoint(j);
+          if (pt.getAppliedImpulse() > 0.f)
+          {
+              const btVector3& ptA = pt.getPositionWorldOnA();
+              const btVector3& ptB = pt.getPositionWorldOnB();
+              const btScalar imp = pt.getAppliedImpulse() ;
+              if((imp/timeStep)>=9.82) printf("****impulse on point%d:%f****\n",j,imp);
+              printf("impulse on point%d:%f \nloc: %f %f %f\ndist:%f\n",j,imp,ptA.getX(),ptA.getY(),ptA.getZ(),pt.getDistance());
+              printf("force on point%d:%f\n",j,imp/timeSubStep);
+
+          }
+      }
+  }
 }
 
 /* Export -------------------------- */
diff --git a/release/scripts/startup/bl_ui/properties_physics_rigidbody.py b/release/scripts/startup/bl_ui/properties_physics_rigidbody.py
index a55bd89ca18..75b584617c3 100644
--- a/release/scripts/startup/bl_ui/properties_physics_rigidbody.py
+++ b/release/scripts/startup/bl_ui/properties_physics_rigidbody.py
@@ -295,6 +295,36 @@ class PHYSICS_PT_rigid_body_dynamics_deactivation(PHYSICS_PT_rigidbody_panel, Pa
         # TODO: other params such as time?
 
 
+class PHYSICS_PT_rigid_body_display_options(PHYSICS_PT_rigidbody_panel, Panel):
+    bl_label = "Display Options"
+    bl_parent_id = 'PHYSICS_PT_rigid_body'
+    bl_options = {'DEFAULT_CLOSED'}
+    COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'}
+
+    @classmethod
+    def poll(cls, context):
+        obj = context.object
+        if obj.parent is not None and obj.parent.rigid_body is not None:
+            return False
+        return (obj and obj.rigid_body and (context.engine in cls.COMPAT_ENGINES))
+
+    def draw(self, context):
+        layout = self.layout
+        layout.use_property_split = True
+
+        ob = context.object
+        rbo = ob.rigid_body
+
+        if rbo is None:
+            rigid_body_warning(layout, "Object does not have a Rigid Body")
+            return
+
+        col = layout.column()
+        col.prop(rbo, "display_forces")
+        col.prop(rbo, "display_acceleration")
+        col.prop(rbo, "display_velocity")
+
+
 classes = (
     PHYSICS_PT_rigid_body,
     PHYSICS_PT_rigid_body_settings,
@@ -304,10 +334,12 @@ classes = (
     PHYSICS_PT_rigid_body_collisions_collections,
     PHYSICS_PT_rigid_body_dynamics,
     PHYSICS_PT_rigid_body_dynamics_deactivation,
+    PHYSICS_PT_rigid_body_display_options,
 )
 
 
 if __name__ == "__main__":  # only for live edit.
-    from bpy.utils import register_class
+    from bpy.utils import register_class, unregister_class
     for cls in classes:
         register_class(cls)
+
diff --git a/source/blender/blenkernel/intern/rigidbody.c b/source/blender/blenkernel/intern/rigidbody.c
index 21b86aa8148..eb0ec2a9d58 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -1746,6 +1746,11 @@ static void rigidbody_update_sim_ob(
                eff_force[2],
                ob->id.name + 2);
       }
+      printf("\tapplying force (%f,%f,%f) to '%s'\n",
+             eff_force[0],
+             eff_force[1],
+             eff_force[2],
+             ob->id.name + 2);
       /* activate object in case it is deactivated */
       if (!is_zero_v3(eff_force)) {
         RB_body_activate(rbo->shared->physics_object);
@@ -2239,6 +2244,7 @@ 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;
diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index e99bf1f5b0c..06f650eb8f0 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -425,6 +425,7 @@ data_to_c_simple(engines/overlay/shaders/extra_wire_frag.glsl SRC)
 data_to_c_simple(engines/overlay/shaders/extra_wire_vert.glsl SRC)
 data_to_c_simple(engines/overlay/shaders/facing_frag.glsl SRC)
 data_to_c_simple(engines/overlay/shaders/facing_vert.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/vector_vert.glsl SRC)
 data_to_c_simple(engines/overlay/shaders/grid_frag.glsl SRC)
 data_to_c_simple(engines/overlay/shaders/grid_vert.glsl SRC)
 data_to_c_simple(engines/overlay/shaders/image_vert.glsl SRC)
diff --git a/source/blender/draw/engines/overlay/overlay_extra.c b/source/blender/draw/engines/overlay/overlay_extra.c
index 2e1c0165513..68f131b6ebe 100644
--- a/source/blender/draw/engines/overlay/overlay_extra.c
+++ b/source/blender/draw/engines/overlay/overlay_extra.c
@@ -58,6 +58,9 @@
 #include "draw_common.h"
 #include "draw_manager_text.h"
 
+#include "math.h"
+#include "BLI_math_rotation.h"
+
 void OVERLAY_extra_cache_init(OVERLAY_Data *vedata)
 {
   OVERLAY_PassList *psl = vedata->psl;
@@ -1557,6 +1560,17 @@ static void OVERLAY_object_name(Object *ob, int theme_id)
                      color);
 }
 
+static void OVERLAY_vector_extra(OVERLAY_ExtraCallBuffers *cb,
+                         OVERLAY_Data *data,
+                         Object *ob,
+                         Scene *scene)
+{
+    GPUShader *sh = OVERLAY_shader_vector();
+    DRWShadingGroup *grp = DRW_shgroup_create(sh, data->psl->extra_ps[0]);
+    DRW_shgroup_uniform_vec3_copy(grp, "objPosition", ob->rigidbody_object->pos);
+    DRW_shgroup_call_procedural_lines(grp, NULL, 3);
+}
+
 void OVERLAY_extra_cache_populate(OVERLAY_Data *vedata, Object *ob)
 {
   OVERLAY_ExtraCallBuffers *cb = OVERLAY_extra_call_buffer_get(vedata, ob);
@@ -1565,6 +1579,7 @@ void OVERLAY_extra_cache_populate(OVERLAY_Data *vedata, Object *ob)
   ViewLayer *view_layer = draw_ctx->view_layer;
   Scene *scene = draw_ctx->scene;
   ModifierData *md = NULL;
+  RigidBodyOb *rbo;
 
   const bool is_select_mode = DRW_state_is_select();
   const bool is_paint_mode = (draw_ctx->object_mode &
@@ -1623,6 +1638,9 @@ void OVERLAY_extra_cache_populate(OVERLAY_Data *vedata, Object *ob)
     }
     if (ob->rigidbody_object != NULL) {
       OVERLAY_collision(cb, ob, color);
+      if(ob->rigidbody_object->sim_display_options & RB_SIM_FORCES)
+        OVERLAY_vector_extra(cb, vedata, ob, scene);
+
     }
     if (ob->dtx & OB_AXIS) {
       DRW_buffer_add_entry(cb->empty_axes, color, ob->obmat);
@@ -1657,3 +1675,5 @@ void OVERLAY_extra_centers_draw(OVERLAY_Data *vedata)
   DRW_draw_pass(psl->extra_grid_ps);
   DRW_draw_pass(psl->extra_centers_ps);
 }
+
+
diff --git a/source/blender/draw/engines/overlay/overlay_private.h b/source/blender/draw/engines/overlay/overlay_private.h
index 969289a3219..d4b68b53fb9 100644
--- a/source/blender/draw/engines/overlay/overlay_private.h
+++ b/source/blender/draw/engines/overlay/overlay_private.h
@@ -731,6 +731,7 @@ GPUShader *OVERLAY_shader_outline_prepass(bool use_wire);
 GPUShader *OVERLAY_shader_outline_prepass_gpencil(void);
 GPUShader *OVERLAY_shader_outline_prepass_pointcloud(void);
 GPUShader *OVERLAY_shader_extra_grid(void);
+GPUShader *OVERLAY_shader_vector(void);
 GPUShader *OVERLAY_shader_outline_detect(void);
 GPUShader *OVERLAY_shader_paint_face(void);
 GPUShader *OVERLAY_shader_paint_point(void);
diff --git a/source/blender/draw/engines/overlay/overlay_shader.c b/source/blender/draw/engines/overlay/overlay_shader.c
index c9c26e3faaa..64ce23ce561 100644
--- a/source/blender/draw/engines/overlay/overlay_shader.c
+++ b/source/blender/draw/engines/overlay/overlay_shader.c
@@ -91,6 +91,7 @@ extern char datatoc_extra_wire_frag_glsl[];
 extern char datatoc_extra_wire_vert_glsl[];
 extern char datatoc_facing_frag_glsl[];
 extern char datatoc_facing_vert_glsl[];
+extern char datatoc_vector_vert_glsl[];
 extern char datatoc_grid_frag_glsl[];
 extern char datatoc_grid_vert_glsl[];
 extern char datatoc_image_frag_glsl[];
@@ -196,6 +197,7 @@ typedef struct OVERLAY_Shaders {
   GPUShader *extra_lightprobe_grid;
   GPUShader *extra_loose_point;
   GPUShader *facing;
+  GPUShader *force_vector;
   GPUShader *gpencil_canvas;
   GPUShader *grid;
   GPUShader *grid_image;
@@ -1448,6 +1450,17 @@ struct GPUShader *OVERLAY_shader_uniform_color(void)
   return sh_data->uniform_color;
 }
 
+struct GPUShader *OVERLAY_shader_vector(){
+    OVERLAY_Shaders *sh_data = &e_data.sh_data[1];
+      sh_data->force_vector = DRW_shader_create_with_lib(
+          datatoc_vector_vert_glsl,
+          NULL,
+          datatoc_gpu_shader_flat_color_frag_glsl,
+          datatoc_common_view_lib_glsl,
+          "#define blender_srgb_to_framebuffer_space(a) a\n");
+      return sh_data->force_vector;
+}
+
 struct GPUShader *OVERLAY_shader_volume_velocity(bool use_needle, bool use_mac)
 {
   OVERLAY_Shaders *sh_data = &e_data.sh_data[0];
diff --git a/source/blender/draw/engines/overlay/shaders/vector_vert.glsl b/source/blender/draw/engines/overlay/shaders/vector_vert.glsl
new file mode 100644
index 00000000000..6e34ec595dc
--- /dev/null
+++ b/source/blender/draw/engines/overlay/shaders/vector_vert.glsl
@@ -0,0 +1,23 @@
+
+uniform vec3 objPosition;
+
+flat out vec4 finalColor;
+
+const vec3 verts[5] = vec3[5](vec3(0.0, 0.0, 0.0),
+                                vec3(0.0, 0.0, 1.8),
+          

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list