Blender
V3.3
|
#include "implicit.h"
#include "MEM_guardedalloc.h"
#include "DNA_meshdata_types.h"
#include "DNA_object_force_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "DNA_texture_types.h"
#include "BLI_math.h"
#include "BLI_utildefines.h"
#include "BKE_cloth.h"
#include "BKE_collision.h"
#include "BKE_effect.h"
#include "SIM_mass_spring.h"
Go to the source code of this file.
Classes | |
struct | fmatrix3x3 |
struct | Implicit_Data |
Typedefs | |
typedef float | lfVector[3] |
typedef struct fmatrix3x3 | fmatrix3x3 |
typedef struct Implicit_Data | Implicit_Data |
Variables | |
static float | I [3][3] = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}} |
static float | ZERO [3][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}} |
typedef struct fmatrix3x3 fmatrix3x3 |
typedef struct Implicit_Data Implicit_Data |
typedef float lfVector[3] |
Definition at line 62 of file implicit_blender.c.
DO_INLINE void add_fmatrix_fmatrix | ( | float | to[3][3], |
const float | matrixA[3][3], | ||
const float | matrixB[3][3] | ||
) |
Definition at line 434 of file implicit_blender.c.
References add_v3_v3v3().
DO_INLINE void add_lfvector_lfvector | ( | float(*) | to[3], |
float(*) | fLongVectorA[3], | ||
float(*) | fLongVectorB[3], | ||
unsigned int | verts | ||
) |
Definition at line 197 of file implicit_blender.c.
References add_v3_v3v3(), and verts.
Referenced by mul_bfmatrix_lfvector(), and SIM_mass_spring_solve_velocities().
DO_INLINE void add_lfvector_lfvectorS | ( | float(*) | to[3], |
float(*) | fLongVectorA[3], | ||
float(*) | fLongVectorB[3], | ||
float | bS, | ||
unsigned int | verts | ||
) |
Definition at line 209 of file implicit_blender.c.
References VECADDS, and verts.
Referenced by cg_filtered(), and SIM_mass_spring_solve_positions().
DO_INLINE void add_lfvectorS_lfvectorS | ( | float(*) | to[3], |
float(*) | fLongVectorA[3], | ||
float | aS, | ||
float(*) | fLongVectorB[3], | ||
float | bS, | ||
unsigned int | verts | ||
) |
Definition at line 222 of file implicit_blender.c.
References VECADDSS, and verts.
Referenced by SIM_mass_spring_solve_velocities().
BLI_INLINE void apply_spring | ( | Implicit_Data * | data, |
int | i, | ||
int | j, | ||
const float | f[3], | ||
const float | dfdx[3][3], | ||
const float | dfdv[3][3] | ||
) |
Definition at line 1761 of file implicit_blender.c.
References add_m3_m3m3(), add_v3_v3(), data, SIM_mass_spring_add_block(), sub_m3_m3m3(), and sub_v3_v3().
Referenced by SIM_mass_spring_force_spring_bending(), and SIM_mass_spring_force_spring_linear().
BLI_INLINE float bend_angle | ( | const float | dir_a[3], |
const float | dir_b[3], | ||
const float | dir_e[3] | ||
) |
Definition at line 1904 of file implicit_blender.c.
References atan2f, KDL::cos(), cross_v3_v3v3(), dot_v3v3(), and KDL::sin().
Referenced by spring_angle().
|
static |
Definition at line 1448 of file implicit_blender.c.
References cross_v3_v3v3(), nor, normalize_v3(), sub_v3_v3v3(), v1, and v2.
Referenced by SIM_mass_spring_force_face_extern(), SIM_mass_spring_force_face_wind(), SIM_mass_spring_force_pressure(), and SIM_tri_area().
|
static |
Definition at line 837 of file implicit_blender.c.
References add_lfvector_lfvectorS(), Freestyle::c, cp_lfvector(), create_lfvector(), del_lfvector(), dot_lfvector(), filter(), mul_bfmatrix_lfvector(), print_lvector(), r, result, SIM_SOLVER_NO_CONVERGENCE, SIM_SOLVER_SUCCESS, sqrtf, sub_lfvector_lfvector(), fmatrix3x3::vcount, and z.
Referenced by SIM_mass_spring_solve_velocities().
DO_INLINE void cp_bfmatrix | ( | fmatrix3x3 * | to, |
fmatrix3x3 * | from | ||
) |
Definition at line 568 of file implicit_blender.c.
References from.
Referenced by SIM_mass_spring_solve_velocities().
Definition at line 349 of file implicit_blender.c.
References copy_v3_v3(), and from.
Referenced by init_bfmatrix(), initdiag_bfmatrix(), and initdiag_fmatrixS().
Definition at line 138 of file implicit_blender.c.
Referenced by cg_filtered(), and SIM_mass_spring_apply_result().
DO_INLINE fmatrix3x3* create_bfmatrix | ( | unsigned int | verts, |
unsigned int | springs | ||
) |
Definition at line 542 of file implicit_blender.c.
References init_fmatrix(), MEM_callocN, fmatrix3x3::scount, fmatrix3x3::vcount, and verts.
Referenced by SIM_mass_spring_solver_create().
Definition at line 123 of file implicit_blender.c.
References MEM_callocN, and verts.
Referenced by cg_filtered(), mul_bfmatrix_lfvector(), SIM_mass_spring_solve_velocities(), and SIM_mass_spring_solver_create().
BLI_INLINE void cross_m3_v3m3 | ( | float | r[3][3], |
const float | v[3], | ||
const float | m[3][3] | ||
) |
Definition at line 485 of file implicit_blender.c.
References cross_v3_v3v3(), r, and v.
Referenced by SIM_mass_spring_force_reference_frame().
BLI_INLINE void cross_v3_identity | ( | float | r[3][3], |
const float | v[3] | ||
) |
Definition at line 492 of file implicit_blender.c.
Referenced by SIM_mass_spring_force_reference_frame().
DO_INLINE void del_bfmatrix | ( | fmatrix3x3 * | matrix | ) |
Definition at line 560 of file implicit_blender.c.
References MEM_freeN, and NULL.
Referenced by SIM_mass_spring_solver_free().
Definition at line 130 of file implicit_blender.c.
References MEM_freeN, and NULL.
Referenced by cg_filtered(), mul_bfmatrix_lfvector(), SIM_mass_spring_solve_velocities(), and SIM_mass_spring_solver_free().
BLI_INLINE void dfdv_damp | ( | float | to[3][3], |
const float | dir[3], | ||
float | damping | ||
) |
Definition at line 1679 of file implicit_blender.c.
References mul_m3_fl(), and outerproduct().
Referenced by SIM_mass_spring_force_spring_goal(), and SIM_mass_spring_force_spring_linear().
Definition at line 1650 of file implicit_blender.c.
References I, L, blender::math::length(), mul_m3_fl(), outerproduct(), and sub_m3_m3m3().
Referenced by SIM_mass_spring_force_spring_goal(), and SIM_mass_spring_force_spring_linear().
DO_INLINE float dot_lfvector | ( | float(*) | fLongVectorA[3], |
float(*) | fLongVectorB[3], | ||
unsigned int | verts | ||
) |
Definition at line 180 of file implicit_blender.c.
References dot_v3v3(), and verts.
Referenced by cg_filtered().
BLI_INLINE void edge_avg | ( | lfVector * | data, |
int | i, | ||
int | j, | ||
float | r_avg[3] | ||
) |
BLI_INLINE void edge_norm | ( | lfVector * | data, |
int | i, | ||
int | j, | ||
float | r_dir[3] | ||
) |
Definition at line 1898 of file implicit_blender.c.
References data, normalize_v3(), and sub_v3_v3v3().
Referenced by spring_angle().
|
static |
Definition at line 1592 of file implicit_blender.c.
References usdtokens::density(), dot_v3v3(), float(), len_v3(), blender::math::length(), M_PI, mul_v3_v3fl(), sqrtf, and zero_v3().
Referenced by SIM_mass_spring_force_edge_wind().
BLI_INLINE float fb | ( | float | length, |
float | L | ||
) |
Definition at line 1686 of file implicit_blender.c.
References L, blender::math::length(), and x.
Referenced by blender::gpu::Texture::attach_to(), gjkepa2_impl::EPA::bind(), EPA< btConvexTemplate >::bind(), BM_edge_calc_rotate(), BM_edge_rotate(), BM_edge_rotate_check(), BPyGPUFrameBuffer_CreatePyObject(), buf_rectfill_area(), blender::gpu::GLTexture::check_feedback_loop(), blender::gpu::MTLTexture::clear(), blender::gpu::GLTexture::clear(), convertJoints(), blender::gpu::Texture::detach_from(), blender::gpu::detect_mip_render_workaround(), DRW_curves_update(), DRW_hair_update(), ED_region_do_draw(), edbm_edge_rotate_selected_exec(), EEVEE_lightbake_filter_diffuse(), EEVEE_lightbake_filter_glossy(), EEVEE_lightbake_filter_visibility(), EEVEE_lookdev_draw(), EEVEE_lut_update_ggx_brdf(), EEVEE_lut_update_ggx_btdf(), fbstar(), fbstar_jacobi(), GPU_framebuffer_bind_loadstore(), GPU_framebuffer_config_array(), GPU_framebuffer_push(), GPU_framebuffer_texture_attach(), GPU_framebuffer_texture_cubeface_attach(), GPU_framebuffer_texture_detach(), GPU_framebuffer_texture_layer_attach(), GPU_offscreen_bind(), GPU_offscreen_create(), GPU_offscreen_unbind(), gpu_select_pick_load_id(), GPU_viewport_bind_from_offscreen(), internalInitMultipleJoints(), lineart_bounding_area_triangle_intersect(), pygpu_framebuffer_free_if_possible(), pygpu_framebuffer_stack_pop_and_restore_or_error(), pygpu_framebuffer_stack_push_and_bind_or_error(), blender::gpu::MTLRenderPassState::reset_state(), sequencer_ibuf_get(), and writeBackJoints().
BLI_INLINE float fbderiv | ( | float | length, |
float | L | ||
) |
Definition at line 1695 of file implicit_blender.c.
References L, blender::math::length(), and x.
Referenced by fbstar_jacobi().
Definition at line 1703 of file implicit_blender.c.
References fb(), L, and blender::math::length().
Referenced by SIM_mass_spring_force_spring_bending(), and SIM_mass_spring_force_spring_linear().
Definition at line 1716 of file implicit_blender.c.
References fb(), fbderiv(), L, and blender::math::length().
Referenced by SIM_mass_spring_force_spring_bending(), and SIM_mass_spring_force_spring_linear().
DO_INLINE void filter | ( | lfVector * | V, |
fmatrix3x3 * | S | ||
) |
Definition at line 758 of file implicit_blender.c.
References mul_m3_v3(), r, V, and fmatrix3x3::vcount.
Referenced by achannel_setting_flush_widget_cb(), action_frame_has_keyframe(), actkeys_channels_get_selected_extents(), actkeys_find_key_at_position(), actkeys_find_list_element_at_position(), actkeys_framejump_exec(), actkeys_is_key_at_position(), actkeys_mselect_channel_only(), actkeys_mselect_column(), actkeys_mselect_single(), actkeys_select_leftright(), actkeys_select_linked_exec(), ANIM_animdata_keyframe_callback(), anim_channels_for_selection(), ANIM_editkeyframes_refresh(), ANIM_set_active_channel(), ANIM_sync_animchannels_to_data(), animchannels_clean_empty_exec(), animchannels_delete_exec(), animchannels_enable_exec(), animchannels_group_channels(), animchannels_group_exec(), animchannels_rearrange_exec(), animchannels_ungroup_exec(), bake_graph_curves(), BKE_tracking_stabilize_frame(), box_select_action(), box_select_anim_channels(), box_select_graphcurves(), box_select_graphkeys(), box_select_nla_strips(), bpy_bmesh_transform(), cachefile_to_keylist(), cg_filtered(), clean_action_keys(), clean_graph_keys(), blender::deg::clear_id_nodes_conditional(), click_select_channel_fcurve(), click_select_channel_gplayer(), click_select_channel_group(), columnselect_action_keys(), columnselect_graph_keys(), Eigen::internal::constrained_conjugate_gradient(), blender::bke::id::remapper::IDRemapper::contains_mappings_for_any(), copy_action_keys(), copy_graph_keys(), createTransActionData(), createTransNlaData(), delete_action_keys(), delete_graph_keys(), deselect_action_keys(), deselect_graph_keys(), deselect_nla_strips(), draw_channel_names(), draw_channel_strips(), draw_nla_channel_list(), draw_nla_main_data(), drivers_editor_show_exec(), duplicate_action_keys(), duplicate_graph_keys(), ED_asset_filter_matches_asset(), ED_gpencil_anim_copybuf_copy(), ED_gpencil_anim_copybuf_paste(), ED_nla_postop_refresh(), equalize_graph_keys(), fcurve_frame_has_keyframe(), filelist_setfilter_options(), filter_reorder(), blender::compositor::DenoiseOperation::generate_denoise(), get_active_fcurve_channel(), get_filter_expand_flag(), get_keyframe_extents(), get_nearest_fcurve_verts_list(), get_nlastrip_extents(), graph_draw_channel_names(), graph_draw_curves(), graph_driver_delete_invalid_exec(), graph_fmodifier_add_exec(), graph_fmodifier_paste_exec(), graph_refresh_fcurve_colors(), graphkeys_euler_filter_exec(), graphkeys_mselect_column(), graphkeys_select_leftright(), graphkeys_select_linked_exec(), graphkeys_smooth_exec(), graphop_editable_keyframes_poll(), graphop_selected_fcurve_poll(), graphop_visible_keyframes_poll(), graphview_curves_hide_exec(), graphview_curves_reveal_exec(), id_frame_has_keyframe(), IMB_filter_extend(), IMB_transform(), initialize_animdata_selection_filter(), initialize_box_select_anim_data(), insert_action_keys(), insert_graph_keys(), is_filtered_asset(), is_filtered_asset_library(), is_filtered_file(), is_filtered_file_name(), is_filtered_file_relpath(), is_filtered_file_type(), is_filtered_hidden(), is_filtered_id_file_type(), is_filtered_lib(), is_filtered_lib_type(), is_filtered_main(), is_filtered_main_assets(), markers_selectkeys_between(), mirror_action_keys(), mirror_graph_keys(), mouse_action_keys(), mouse_anim_channels(), mouse_graph_keys(), mouse_nla_channels(), mouse_nla_strips(), nla_channels_get_selected_extents(), nla_fmodifier_add_exec(), nla_fmodifier_copy_exec(), nla_fmodifier_paste_exec(), nla_panel_context(), nlachannels_pushdown_exec(), nlaedit_add_actionclip_exec(), nlaedit_add_meta_exec(), nlaedit_add_sound_exec(), nlaedit_add_tracks_empty(), nlaedit_add_tracks_existing(), nlaedit_add_transition_exec(), nlaedit_apply_scale_exec(), nlaedit_clear_scale_exec(), nlaedit_delete_exec(), nlaedit_delete_tracks_exec(), nlaedit_disable_tweakmode(), nlaedit_duplicate_exec(), nlaedit_enable_tweakmode_exec(), nlaedit_make_single_user_exec(), nlaedit_move_down_exec(), nlaedit_move_up_exec(), nlaedit_remove_meta_exec(), nlaedit_select_leftright(), nlaedit_snap_exec(), nlaedit_split_exec(), nlaedit_strip_at_region_position(), nlaedit_swap_exec(), nlaedit_sync_actlen_exec(), nlaedit_toggle_mute_exec(), blender::nodes::node_composite_blur_cc::node_composit_buts_blur(), ob_keyframes_loop(), ob_to_keylist(), object_frame_has_keyframe(), paste_action_keys(), paste_graph_keys(), posttrans_action_clean(), prepare_filter_asset_library(), preview_filter_to_idfilter(), rearrange_animchannels_filter_visible(), rearrange_gpencil_channels(), region_select_action_keys(), rename_anim_channels(), RVBlurBitmap2_float(), sample_action_keys(), sample_graph_keys(), scene_keyframes_loop(), scene_to_keylist(), screen_ctx_active_editable_fcurve(), screen_ctx_sel_actions_impl(), screen_ctx_sel_edit_fcurves_(), screen_ctx_selected_editable_keyframes(), select_anim_channel_keys(), select_moreless_action_keys(), select_moreless_graph_keys(), sequencer_preprocess_transform_crop(), set_filter_expand_flag(), seteasing_graph_keys(), setexpo_action_keys(), setexpo_graph_keys(), setflag_anim_channels(), sethandles_action_keys(), sethandles_graph_keys(), setipo_graph_keys(), setkeytype_action_keys(), snap_action_keys(), snap_graph_keys(), special_aftertrans_update__actedit(), special_aftertrans_update__graph(), special_aftertrans_update__nla(), spreadsheet_filter_panel_draw(), spreadsheet_filter_panel_draw_header(), sum_selected_keyframes(), summary_keyframes_loop(), summary_to_keylist(), blender::eevee::Film::sync(), blender::bke::tests::TEST_F(), ui_template_id(), uilist_filter_items_default(), uiTemplateGpencilColorPreview(), uiTemplateID(), uiTemplateIDBrowse(), uiTemplateIDPreview(), uiTemplateIDTabs(), unbake_graph_curves(), and WM_operator_properties_filesel().
DO_INLINE void init_bfmatrix | ( | fmatrix3x3 * | matrix, |
float | m3[3][3] | ||
) |
Definition at line 576 of file implicit_blender.c.
References cp_fmatrix(), fmatrix3x3::scount, and fmatrix3x3::vcount.
Referenced by SIM_mass_spring_clear_forces().
BLI_INLINE void init_fmatrix | ( | fmatrix3x3 * | matrix, |
int | r, | ||
int | c | ||
) |
Definition at line 535 of file implicit_blender.c.
References Freestyle::c, fmatrix3x3::c, r, and fmatrix3x3::r.
Referenced by create_bfmatrix(), and SIM_mass_spring_add_block().
Definition at line 143 of file implicit_blender.c.
References copy_v3_v3(), and verts.
DO_INLINE void initdiag_bfmatrix | ( | fmatrix3x3 * | matrix, |
float | m3[3][3] | ||
) |
Definition at line 587 of file implicit_blender.c.
References cp_fmatrix(), fmatrix3x3::scount, and fmatrix3x3::vcount.
Referenced by SIM_mass_spring_solver_create().
Definition at line 358 of file implicit_blender.c.
References cp_fmatrix(), and ZERO.
BLI_INLINE void madd_m3_m3fl | ( | float | r[3][3], |
const float | m[3][3], | ||
float | f | ||
) |
Definition at line 505 of file implicit_blender.c.
References r.
Referenced by SIM_mass_spring_force_spring_bending_hair().
DO_INLINE void mul_bfmatrix_lfvector | ( | float(*) | to[3], |
fmatrix3x3 * | from, | ||
lfVector * | fLongVector | ||
) |
Definition at line 602 of file implicit_blender.c.
References add_lfvector_lfvector(), Freestyle::c, create_lfvector(), del_lfvector(), from, muladd_fmatrix_fvector(), muladd_fmatrixT_fvector(), r, and zero_lfvector().
Referenced by cg_filtered(), and SIM_mass_spring_solve_velocities().
Definition at line 427 of file implicit_blender.c.
References dot_v3v3(), and from.
Definition at line 409 of file implicit_blender.c.
References mul_fvector_S().
Definition at line 418 of file implicit_blender.c.
References from.
Definition at line 77 of file implicit_blender.c.
References from.
Referenced by mul_fmatrix_S(), mul_fvectorT_fvector(), mul_fvectorT_fvectorS(), and mul_lfvectorS().
DO_INLINE void mul_fvectorT_fvector | ( | float | to[3][3], |
const float | vectorA[3], | ||
const float | vectorB[3] | ||
) |
Definition at line 85 of file implicit_blender.c.
References mul_fvector_S().
Referenced by mul_fvectorT_fvectorS(), SIM_mass_spring_add_constraint_ndof1(), and SIM_mass_spring_add_constraint_ndof2().
DO_INLINE void mul_fvectorT_fvectorS | ( | float | to[3][3], |
float | vectorA[3], | ||
float | vectorB[3], | ||
float | aS | ||
) |
Definition at line 93 of file implicit_blender.c.
References mul_fvector_S(), and mul_fvectorT_fvector().
DO_INLINE void mul_lfvectorS | ( | float(*) | to[3], |
float(*) | fLongVector[3], | ||
float | scalar, | ||
unsigned int | verts | ||
) |
Definition at line 156 of file implicit_blender.c.
References mul_fvector_S(), and verts.
DO_INLINE void muladd_fmatrix_fvector | ( | float | to[3], |
const float | matrix[3][3], | ||
const float | from[3] | ||
) |
Definition at line 464 of file implicit_blender.c.
References dot_v3v3(), and from.
Referenced by mul_bfmatrix_lfvector().
DO_INLINE void muladd_fmatrixT_fvector | ( | float | to[3], |
const float | matrix[3][3], | ||
const float | from[3] | ||
) |
Definition at line 471 of file implicit_blender.c.
References from.
Referenced by mul_bfmatrix_lfvector().
BLI_INLINE void outerproduct | ( | float | r[3][3], |
const float | a[3], | ||
const float | b[3] | ||
) |
Definition at line 478 of file implicit_blender.c.
References Freestyle::a, usdtokens::b(), mul_v3_v3fl(), and r.
Referenced by dfdv_damp(), dfdx_spring(), SIM_mass_spring_force_spring_bending(), SIM_mass_spring_force_spring_linear(), and spring_grad_dir().
BLI_INLINE void poly_avg | ( | lfVector * | data, |
const int * | inds, | ||
int | len, | ||
float | r_avg[3] | ||
) |
Definition at line 1871 of file implicit_blender.c.
References data, float(), len, madd_v3_v3fl(), and zero_v3().
Referenced by poly_norm(), and spring_angle().
BLI_INLINE void poly_norm | ( | lfVector * | data, |
int | i, | ||
int | j, | ||
int * | inds, | ||
int | len, | ||
float | r_dir[3] | ||
) |
Definition at line 1882 of file implicit_blender.c.
References data, len, normal_tri_v3(), and poly_avg().
Referenced by spring_angle().
BLI_INLINE void root_to_world_m3 | ( | Implicit_Data * | data, |
int | index, | ||
float | r[3][3], | ||
const float | m[3][3] | ||
) |
Definition at line 748 of file implicit_blender.c.
References data, mul_m3_m3m3(), and r.
BLI_INLINE void root_to_world_v3 | ( | Implicit_Data * | data, |
int | index, | ||
float | r[3], | ||
const float | v[3] | ||
) |
Definition at line 732 of file implicit_blender.c.
References data, mul_v3_m3v3(), r, and v.
Referenced by SIM_mass_spring_get_motion_state(), SIM_mass_spring_get_new_position(), SIM_mass_spring_get_new_velocity(), SIM_mass_spring_get_position(), and SIM_mass_spring_get_velocity().
|
static |
Definition at line 1272 of file implicit_blender.c.
References BLI_assert, data, init_fmatrix(), M, v1, and v2.
Referenced by apply_spring(), and SIM_mass_spring_force_spring_bending_hair().
void SIM_mass_spring_add_constraint_ndof0 | ( | Implicit_Data * | data, |
int | index, | ||
const float | dV[3] | ||
) |
Definition at line 1299 of file implicit_blender.c.
References data, world_to_root_v3(), and zero_m3().
Referenced by cloth_setup_constraints().
void SIM_mass_spring_add_constraint_ndof1 | ( | Implicit_Data * | data, |
int | index, | ||
const float | c1[3], | ||
const float | c2[3], | ||
const float | dV[3] | ||
) |
Definition at line 1306 of file implicit_blender.c.
References add_v3_v3(), copy_m3_m3(), data, I, mul_fvectorT_fvector(), sub_m3_m3m3(), and world_to_root_v3().
void SIM_mass_spring_add_constraint_ndof2 | ( | Implicit_Data * | data, |
int | index, | ||
const float | c1[3], | ||
const float | dV[3] | ||
) |
Definition at line 1327 of file implicit_blender.c.
References add_v3_v3(), copy_m3_m3(), data, I, mul_fvectorT_fvector(), sub_m3_m3m3(), and world_to_root_v3().
void SIM_mass_spring_apply_result | ( | Implicit_Data * | data | ) |
Definition at line 1185 of file implicit_blender.c.
References cp_lfvector(), and data.
Referenced by SIM_cloth_solve().
void SIM_mass_spring_clear_constraints | ( | Implicit_Data * | data | ) |
Definition at line 1290 of file implicit_blender.c.
References data, unit_m3(), and zero_v3().
Referenced by cloth_setup_constraints().
void SIM_mass_spring_clear_forces | ( | struct Implicit_Data * | data | ) |
Clear the force vector at the beginning of the time step.
Definition at line 1345 of file implicit_blender.c.
References data, init_bfmatrix(), ZERO, and zero_lfvector().
Referenced by SIM_cloth_solve().
void SIM_mass_spring_force_drag | ( | struct Implicit_Data * | data, |
float | drag | ||
) |
Global drag force (velocity damping).
Definition at line 1420 of file implicit_blender.c.
References add_m3_m3m3(), copy_m3_m3(), data, I, madd_v3_v3fl(), and mul_m3_fl().
Referenced by cloth_calc_force().
void SIM_mass_spring_force_edge_wind | ( | struct Implicit_Data * | data, |
int | v1, | ||
int | v2, | ||
float | radius1, | ||
float | radius2, | ||
const float(*) | winvec[3] | ||
) |
Wind force, acting on an edge.
Definition at line 1617 of file implicit_blender.c.
References add_v3_v3(), data, edge_wind_vertex(), blender::math::length(), normalize_v3(), sub_v3_v3v3(), v1, v2, and world_to_root_v3().
Referenced by cloth_calc_force().
void SIM_mass_spring_force_extern | ( | struct Implicit_Data * | data, |
int | i, | ||
const float | f[3], | ||
float | dfdx[3][3], | ||
float | dfdv[3][3] | ||
) |
Custom external force.
Definition at line 1435 of file implicit_blender.c.
References add_m3_m3m3(), add_v3_v3(), data, world_to_root_m3(), and world_to_root_v3().
void SIM_mass_spring_force_face_extern | ( | struct Implicit_Data * | data, |
int | v1, | ||
int | v2, | ||
int | v3, | ||
const float(*) | forcevec[3] | ||
) |
Arbitrary per-unit-area vector force field acting on a face..
Definition at line 1505 of file implicit_blender.c.
References add_v3_v3(), blender::compositor::area(), calc_nor_area_tri(), data, mul_v3_fl(), nor, v1, v2, world_to_root_v3(), and zero_v3().
Referenced by cloth_calc_force().
void SIM_mass_spring_force_face_wind | ( | struct Implicit_Data * | data, |
int | v1, | ||
int | v2, | ||
int | v3, | ||
const float(*) | winvec[3] | ||
) |
Wind force, acting on a face (only generates pressure from the normal component).
Definition at line 1462 of file implicit_blender.c.
References blender::compositor::area(), calc_nor_area_tri(), data, dot_v3v3(), madd_v3_v3fl(), mul_v3_fl(), nor, v1, v2, and world_to_root_v3().
Referenced by cloth_calc_force().
void SIM_mass_spring_force_gravity | ( | struct Implicit_Data * | data, |
int | index, | ||
float | mass, | ||
const float | g[3] | ||
) |
Simple uniform gravity force.
Definition at line 1410 of file implicit_blender.c.
References add_v3_v3(), data, usdtokens::g(), mul_v3_fl(), and world_to_root_v3().
Referenced by cloth_calc_force().
void SIM_mass_spring_force_pressure | ( | Implicit_Data * | data, |
int | v1, | ||
int | v2, | ||
int | v3, | ||
float | common_pressure, | ||
const float * | vertex_pressure, | ||
const float | weights[3] | ||
) |
Definition at line 1549 of file implicit_blender.c.
References blender::compositor::area(), calc_nor_area_tri(), copy_v3_fl3(), data, madd_v3_v3fl(), mul_v3_fl(), nor, v1, v2, and zero_v3().
Referenced by cloth_calc_force().
void SIM_mass_spring_force_reference_frame | ( | struct Implicit_Data * | data, |
int | index, | ||
const float | acceleration[3], | ||
const float | omega[3], | ||
const float | domega_dt[3], | ||
float | mass | ||
) |
Fictitious forces introduced by moving coordinate systems.
Definition at line 1355 of file implicit_blender.c.
References add_m3_m3m3(), add_v3_v3(), copy_m3_m3(), cross_m3_v3m3(), cross_v3_identity(), cross_v3_v3v3(), data, mul_m3_fl(), mul_v3_fl(), negate_m3(), sub_v3_v3(), sub_v3_v3v3(), void, w(), and world_to_root_v3().
bool SIM_mass_spring_force_spring_angular | ( | struct Implicit_Data * | data, |
int | i, | ||
int | j, | ||
int * | i_a, | ||
int * | i_b, | ||
int | len_a, | ||
int | len_b, | ||
float | restang, | ||
float | stiffness, | ||
float | damping | ||
) |
Angular spring force between two polygons.
Definition at line 1948 of file implicit_blender.c.
References add_v3_v3(), add_v3_v3v3(), angle(), data, dot_v3v3(), mul_v3_v3fl(), spring_angle(), sub_v3_v3(), and x.
Referenced by cloth_calc_spring_force().
bool SIM_mass_spring_force_spring_bending | ( | struct Implicit_Data * | data, |
int | i, | ||
int | j, | ||
float | restlen, | ||
float | kb, | ||
float | cb | ||
) |
Bending force, forming a triangle at the base of two structural springs.
Definition at line 1842 of file implicit_blender.c.
References apply_spring(), data, fbstar(), fbstar_jacobi(), blender::math::length(), mul_m3_fl(), mul_v3_v3fl(), outerproduct(), spring_length(), and zero_m3().
Referenced by cloth_calc_spring_force().
bool SIM_mass_spring_force_spring_bending_hair | ( | struct Implicit_Data * | data, |
int | i, | ||
int | j, | ||
int | k, | ||
const float | target[3], | ||
float | stiffness, | ||
float | damping | ||
) |
Angular bending force based on local target vectors.
Definition at line 2166 of file implicit_blender.c.
References add_m3_m3m3(), add_v3_v3(), copy_m3_m3(), copy_v3_v3(), data, dot_v3v3(), I, madd_m3_m3fl(), madd_v3_v3fl(), madd_v3_v3v3fl(), mul_v3_v3fl(), negate_m3(), negate_v3_v3(), SIM_mass_spring_add_block(), spring_grad_dir(), spring_hairbend_estimate_dfdv(), spring_hairbend_estimate_dfdx(), spring_hairbend_forces(), sub_m3_m3m3(), sub_v3_v3(), sub_v3_v3v3(), world_to_root_v3(), zero_m3(), and zero_v3().
Referenced by cloth_calc_spring_force().
bool SIM_mass_spring_force_spring_goal | ( | struct Implicit_Data * | data, |
int | i, | ||
const float | goal_x[3], | ||
const float | goal_v[3], | ||
float | stiffness, | ||
float | damping | ||
) |
Global goal spring.
Definition at line 2318 of file implicit_blender.c.
References add_m3_m3m3(), add_v3_v3(), ALMOST_ZERO, data, dfdv_damp(), dfdx_spring(), dot_v3v3(), blender::math::length(), madd_v3_v3fl(), mul_v3_v3fl(), normalize_v3_v3(), sub_v3_v3v3(), and world_to_root_v3().
Referenced by cloth_calc_force().
bool SIM_mass_spring_force_spring_linear | ( | struct Implicit_Data * | data, |
int | i, | ||
int | j, | ||
float | restlen, | ||
float | stiffness_tension, | ||
float | damping_tension, | ||
float | stiffness_compression, | ||
float | damping_compression, | ||
bool | resist_compress, | ||
bool | new_compress, | ||
float | clamp_force | ||
) |
Linear spring force between two points.
Definition at line 1782 of file implicit_blender.c.
References apply_spring(), data, dfdv_damp(), dfdx_spring(), dot_v3v3(), fbstar(), fbstar_jacobi(), blender::math::length(), madd_v3_v3fl(), mul_m3_fl(), mul_v3_v3fl(), outerproduct(), and spring_length().
Referenced by cloth_calc_spring_force().
void SIM_mass_spring_force_vertex_wind | ( | Implicit_Data * | data, |
int | v, | ||
float | UNUSEDradius, | ||
const float(*) | winvec[3] | ||
) |
Definition at line 1635 of file implicit_blender.c.
References add_v3_v3(), data, usdtokens::density(), mul_v3_v3fl(), v, and world_to_root_v3().
void SIM_mass_spring_get_motion_state | ( | struct Implicit_Data * | data, |
int | index, | ||
float | x[3], | ||
float | v[3] | ||
) |
Definition at line 1227 of file implicit_blender.c.
References data, root_to_world_v3(), v, and x.
Referenced by cloth_calc_force(), cloth_calc_spring_force(), hair_get_boundbox(), and SIM_cloth_solve().
void SIM_mass_spring_get_new_position | ( | struct Implicit_Data * | data, |
int | index, | ||
float | x[3] | ||
) |
Definition at line 1250 of file implicit_blender.c.
References data, root_to_world_v3(), and x.
Referenced by cloth_solve_collisions().
void SIM_mass_spring_get_new_velocity | ( | struct Implicit_Data * | data, |
int | index, | ||
float | v[3] | ||
) |
Definition at line 1260 of file implicit_blender.c.
References data, root_to_world_v3(), and v.
Referenced by cloth_calc_average_acceleration(), cloth_continuum_step(), cloth_get_grid_location(), and cloth_solve_collisions().
void SIM_mass_spring_get_position | ( | struct Implicit_Data * | data, |
int | index, | ||
float | x[3] | ||
) |
Definition at line 1240 of file implicit_blender.c.
References data, root_to_world_v3(), and x.
Referenced by cloth_calc_pressure_gradient(), cloth_continuum_step(), and cloth_get_grid_location().
void SIM_mass_spring_get_velocity | ( | struct Implicit_Data * | data, |
int | index, | ||
float | v[3] | ||
) |
Definition at line 1245 of file implicit_blender.c.
References data, root_to_world_v3(), and v.
Referenced by cloth_calc_average_acceleration().
void SIM_mass_spring_set_motion_state | ( | Implicit_Data * | data, |
int | index, | ||
const float | x[3], | ||
const float | v[3] | ||
) |
Definition at line 1208 of file implicit_blender.c.
References data, v, world_to_root_v3(), and x.
Referenced by SIM_cloth_solver_init(), and SIM_cloth_solver_set_positions().
void SIM_mass_spring_set_new_position | ( | struct Implicit_Data * | data, |
int | index, | ||
const float | x[3] | ||
) |
Definition at line 1255 of file implicit_blender.c.
References data, world_to_root_v3(), and x.
void SIM_mass_spring_set_new_velocity | ( | struct Implicit_Data * | data, |
int | index, | ||
const float | v[3] | ||
) |
Definition at line 1265 of file implicit_blender.c.
References data, v, and world_to_root_v3().
Referenced by cloth_continuum_step(), and cloth_solve_collisions().
void SIM_mass_spring_set_position | ( | Implicit_Data * | data, |
int | index, | ||
const float | x[3] | ||
) |
Definition at line 1217 of file implicit_blender.c.
References data, world_to_root_v3(), and x.
Referenced by SIM_cloth_solve().
void SIM_mass_spring_set_rest_transform | ( | Implicit_Data * | data, |
int | index, | ||
float | tfm[3][3] | ||
) |
Definition at line 1198 of file implicit_blender.c.
References copy_m3_m3(), data, unit_m3(), and void.
Referenced by SIM_cloth_solver_set_positions().
void SIM_mass_spring_set_velocity | ( | Implicit_Data * | data, |
int | index, | ||
const float | v[3] | ||
) |
Definition at line 1222 of file implicit_blender.c.
References data, v, and world_to_root_v3().
Referenced by SIM_cloth_solve().
void SIM_mass_spring_set_vertex_mass | ( | Implicit_Data * | data, |
int | index, | ||
float | mass | ||
) |
Definition at line 1192 of file implicit_blender.c.
References data, mul_m3_fl(), and unit_m3().
Referenced by SIM_mass_spring_set_implicit_vertex_mass().
bool SIM_mass_spring_solve_positions | ( | Implicit_Data * | data, |
float | dt | ||
) |
Definition at line 1175 of file implicit_blender.c.
References add_lfvector_lfvectorS(), and data.
Referenced by cloth_solve_collisions(), and SIM_cloth_solve().
bool SIM_mass_spring_solve_velocities | ( | Implicit_Data * | data, |
float | dt, | ||
ImplicitSolverResult * | result | ||
) |
Definition at line 1138 of file implicit_blender.c.
References add_lfvector_lfvector(), add_lfvectorS_lfvectorS(), cg_filtered(), cp_bfmatrix(), create_lfvector(), data, del_lfvector(), mul_bfmatrix_lfvector(), PIL_check_seconds_timer(), result, SIM_SOLVER_SUCCESS, subadd_bfmatrixS_bfmatrixS(), and zero_lfvector().
Referenced by SIM_cloth_solve().
Implicit_Data* SIM_mass_spring_solver_create | ( | int | numverts, |
int | numsprings | ||
) |
Definition at line 672 of file implicit_blender.c.
References create_bfmatrix(), create_lfvector(), I, id, initdiag_bfmatrix(), and MEM_callocN.
Referenced by SIM_cloth_solver_init().
void SIM_mass_spring_solver_free | ( | Implicit_Data * | id | ) |
Definition at line 700 of file implicit_blender.c.
References del_bfmatrix(), del_lfvector(), id, and MEM_freeN.
Referenced by SIM_cloth_solver_free().
float SIM_tri_area | ( | struct Implicit_Data * | data, |
int | v1, | ||
int | v2, | ||
int | v3 | ||
) |
Definition at line 1542 of file implicit_blender.c.
References calc_nor_area_tri(), data, nor, v1, and v2.
Referenced by cloth_calc_average_pressure().
float SIM_tri_tetra_volume_signed_6x | ( | Implicit_Data * | data, |
int | v1, | ||
int | v2, | ||
int | v3 | ||
) |
Definition at line 1536 of file implicit_blender.c.
References data, v1, v2, and volume_tri_tetrahedron_signed_v3_6x().
Referenced by cloth_calc_volume().
BLI_INLINE void spring_angle | ( | Implicit_Data * | data, |
int | i, | ||
int | j, | ||
int * | i_a, | ||
int * | i_b, | ||
int | len_a, | ||
int | len_b, | ||
float | r_dir_a[3], | ||
float | r_dir_b[3], | ||
float * | r_angle, | ||
float | r_vel_a[3], | ||
float | r_vel_b[3] | ||
) |
Definition at line 1917 of file implicit_blender.c.
References bend_angle(), data, edge_avg(), edge_norm(), poly_avg(), poly_norm(), and sub_v3_v3().
Referenced by SIM_mass_spring_force_spring_angular().
BLI_INLINE void spring_grad_dir | ( | Implicit_Data * | data, |
int | i, | ||
int | j, | ||
float | edge[3], | ||
float | dir[3], | ||
float | grad_dir[3][3] | ||
) |
Definition at line 2000 of file implicit_blender.c.
References ALMOST_ZERO, data, I, blender::math::length(), mul_m3_fl(), normalize_v3_v3(), outerproduct(), sub_m3_m3m3(), sub_v3_v3v3(), and zero_m3().
Referenced by SIM_mass_spring_force_spring_bending_hair().
BLI_INLINE void spring_hairbend_estimate_dfdv | ( | Implicit_Data * | data, |
int | i, | ||
int | j, | ||
int | k, | ||
const float | goal[3], | ||
float | stiffness, | ||
float | damping, | ||
int | q, | ||
float | dfdv[3][3] | ||
) |
Definition at line 2128 of file implicit_blender.c.
References Freestyle::a, usdtokens::b(), copy_m3_m3(), copy_v3_v3(), data, mul_m3_fl(), negate_m3(), spring_hairbend_forces(), sub_v3_v3(), unit_m3(), and zero_m3().
Referenced by SIM_mass_spring_force_spring_bending_hair().
BLI_INLINE void spring_hairbend_estimate_dfdx | ( | Implicit_Data * | data, |
int | i, | ||
int | j, | ||
int | k, | ||
const float | goal[3], | ||
float | stiffness, | ||
float | damping, | ||
int | q, | ||
float | dfdx[3][3] | ||
) |
Definition at line 2089 of file implicit_blender.c.
References Freestyle::a, usdtokens::b(), copy_m3_m3(), copy_v3_v3(), data, mul_m3_fl(), negate_m3(), spring_hairbend_forces(), sub_v3_v3(), unit_m3(), and zero_m3().
Referenced by SIM_mass_spring_force_spring_bending_hair().
BLI_INLINE void spring_hairbend_forces | ( | Implicit_Data * | data, |
int | i, | ||
int | j, | ||
int | k, | ||
const float | goal[3], | ||
float | stiffness, | ||
float | damping, | ||
int | q, | ||
const float | dx[3], | ||
const float | dv[3], | ||
float | r_f[3] | ||
) |
Definition at line 2018 of file implicit_blender.c.
References add_v3_v3(), copy_v3_v3(), data, dot_v3v3(), madd_v3_v3v3fl(), mul_v3_v3fl(), normalize_v3_v3(), sub_v3_v3(), sub_v3_v3v3(), and zero_v3().
Referenced by SIM_mass_spring_force_spring_bending_hair(), spring_hairbend_estimate_dfdv(), and spring_hairbend_estimate_dfdx().
BLI_INLINE bool spring_length | ( | Implicit_Data * | data, |
int | i, | ||
int | j, | ||
float | r_extent[3], | ||
float | r_dir[3], | ||
float * | r_length, | ||
float | r_vel[3] | ||
) |
Definition at line 1729 of file implicit_blender.c.
References ALMOST_ZERO, data, L, len_v3(), blender::math::length(), mul_v3_v3fl(), sub_v3_v3v3(), and zero_v3().
Referenced by SIM_mass_spring_force_spring_bending(), and SIM_mass_spring_force_spring_linear().
DO_INLINE void sub_fmatrix_fmatrix | ( | float | to[3][3], |
const float | matrixA[3][3], | ||
const float | matrixB[3][3] | ||
) |
Definition at line 451 of file implicit_blender.c.
References sub_v3_v3v3().
DO_INLINE void sub_lfvector_lfvector | ( | float(*) | to[3], |
float(*) | fLongVectorA[3], | ||
float(*) | fLongVectorB[3], | ||
unsigned int | verts | ||
) |
Definition at line 248 of file implicit_blender.c.
References sub_v3_v3v3(), and verts.
Referenced by cg_filtered().
DO_INLINE void sub_lfvector_lfvectorS | ( | float(*) | to[3], |
float(*) | fLongVectorA[3], | ||
float(*) | fLongVectorB[3], | ||
float | bS, | ||
unsigned int | verts | ||
) |
Definition at line 236 of file implicit_blender.c.
DO_INLINE void subadd_bfmatrixS_bfmatrixS | ( | fmatrix3x3 * | to, |
fmatrix3x3 * | from, | ||
float | aS, | ||
fmatrix3x3 * | matrix, | ||
float | bS | ||
) |
Definition at line 634 of file implicit_blender.c.
References from, fmatrix3x3::scount, subadd_fmatrixS_fmatrixS(), and fmatrix3x3::vcount.
Referenced by SIM_mass_spring_solve_velocities().
DO_INLINE void subadd_fmatrixS_fmatrixS | ( | float | to[3][3], |
const float | matrixA[3][3], | ||
float | aS, | ||
const float | matrixB[3][3], | ||
float | bS | ||
) |
Definition at line 443 of file implicit_blender.c.
References VECSUBADDSS.
Referenced by subadd_bfmatrixS_bfmatrixS().
DO_INLINE void submul_lfvectorS | ( | float(*) | to[3], |
float(*) | fLongVector[3], | ||
float | scalar, | ||
unsigned int | verts | ||
) |
Definition at line 169 of file implicit_blender.c.
BLI_INLINE void world_to_root_m3 | ( | Implicit_Data * | data, |
int | index, | ||
float | r[3][3], | ||
const float | m[3][3] | ||
) |
Definition at line 737 of file implicit_blender.c.
References copy_m3_m3(), data, mul_m3_m3m3(), r, and transpose_m3().
Referenced by SIM_mass_spring_force_extern().
BLI_INLINE void world_to_root_v3 | ( | Implicit_Data * | data, |
int | index, | ||
float | r[3], | ||
const float | v[3] | ||
) |
Definition at line 726 of file implicit_blender.c.
References copy_v3_v3(), data, mul_transposed_m3_v3(), r, and v.
Referenced by SIM_mass_spring_add_constraint_ndof0(), SIM_mass_spring_add_constraint_ndof1(), SIM_mass_spring_add_constraint_ndof2(), SIM_mass_spring_force_edge_wind(), SIM_mass_spring_force_extern(), SIM_mass_spring_force_face_extern(), SIM_mass_spring_force_face_wind(), SIM_mass_spring_force_gravity(), SIM_mass_spring_force_reference_frame(), SIM_mass_spring_force_spring_bending_hair(), SIM_mass_spring_force_spring_goal(), SIM_mass_spring_force_vertex_wind(), SIM_mass_spring_set_motion_state(), SIM_mass_spring_set_new_position(), SIM_mass_spring_set_new_velocity(), SIM_mass_spring_set_position(), and SIM_mass_spring_set_velocity().
Definition at line 151 of file implicit_blender.c.
References verts.
Referenced by mul_bfmatrix_lfvector(), SIM_mass_spring_clear_forces(), and SIM_mass_spring_solve_velocities().
|
static |
Definition at line 43 of file implicit_blender.c.
Referenced by dfdx_spring(), SIM_mass_spring_add_constraint_ndof1(), SIM_mass_spring_add_constraint_ndof2(), SIM_mass_spring_force_drag(), SIM_mass_spring_force_spring_bending_hair(), SIM_mass_spring_solver_create(), and spring_grad_dir().
|
static |
Definition at line 44 of file implicit_blender.c.
Referenced by initdiag_fmatrixS(), and SIM_mass_spring_clear_forces().