diff options
author | Sebastian Parborg <darkdefende@gmail.com> | 2020-09-02 15:14:47 +0300 |
---|---|---|
committer | Sebastian Parborg <darkdefende@gmail.com> | 2020-09-02 15:20:41 +0300 |
commit | 1aa54d4921c2e8d7114f463a940c169ee573f557 (patch) | |
tree | 902f7f8c82fbeb16acb5d569fafc8423e58dd7a9 /source/blender/blenlib/intern | |
parent | feb4b645d70ec8ad5c3f91a957738a9fba4054f0 (diff) |
Make rigidbody simulation handle animated objects gracefully
The animated objects was not updated for each internal substep for the rigidbody sim.
This would lead to unstable simulations or very annoying clipping artifacts.
Updated the code to use explicit substeps and tie it to the scene frame rate.
Fix T47402: Properly updating the animated objects fixes the reported issue.
Reviewed By: Brecht, Jacques
Differential Revision: http://developer.blender.org/D8762
Diffstat (limited to 'source/blender/blenlib/intern')
-rw-r--r-- | source/blender/blenlib/intern/math_vector_inline.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/source/blender/blenlib/intern/math_vector_inline.c b/source/blender/blenlib/intern/math_vector_inline.c index 13a87b9ec6a..d3c975e3249 100644 --- a/source/blender/blenlib/intern/math_vector_inline.c +++ b/source/blender/blenlib/intern/math_vector_inline.c @@ -1372,6 +1372,24 @@ MINLINE bool compare_len_v3v3(const float v1[3], const float v2[3], const float return (dot_v3v3(d, d) <= (limit * limit)); } +MINLINE bool compare_size_v3v3(const float v1[3], const float v2[3], const float limit) +{ + for (int i = 0; i < 3; i++) { + if (v2[i] == 0.0f) { + /* Catch division by zero. */ + if (v1[i] != v2[i]) { + return false; + } + } + else { + if (fabsf(v1[i] / v2[i] - 1.0f) > limit) { + return false; + } + } + } + return true; +} + /** \name Vector Clamping * \{ */ |