[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