Animating transformations (translation, rotation, scale) from the glTF format is supported now.
Playing, cross-fading and resetting the animations is now optimized, and exposes some new features.
New methods available now:
We now store and use more efficiently the “reset” state of the animation. See the new TimeSensor.detectAffectedFields . Previously, our Spine importer had special (and unoptimal) code to reset the state of bones not affected by the current animation. This mechanism is now more uniform (used by all animations, e.g. those imported from glTF too) and faster (we internally call
ResetAnimationStatejust once for an animation start).
Using the TTimeSensorNode.Start and TTimeSensorNode.Stop you can control simultaneous animations within one scene. See the demo examples/animations/simultaneous_animations_one_scene, it controls two independent animations defined in a single glTF file.
view3dscene has a new “Animations” panel to test animations comfortably.
Show it using the toolbar button “Animations”, or menu item “Animations -> Animations Panel”, or by pressing Ctrl+A.
It allows to run animations easily, controlling their looping, forward, transition (cross-fade time), speed.
It adds buttons to “Stop Animation” and “Reset Animation State”, performing appropriate scene methods.
Fun fact: this commit was one of the most difficult commits to write during this work.
And the commit only adds a (60-line) comment in the middle of the code. The comment contains a proof that actually no code is necessary to achieve what I need! 🙂
There was actually another commit to demo-models to interactively test that my proof is right. The scene is in demo-models animation/spine_animation_blending_test subdirectory, you can open the
exported/test_animation_blending.jsonfile with view3dscene.
And, of course, the next day I refactored the code, and made the comment shorter too 🙂
We now support collision detection using our physics engine (Kraft). You can be notified when a particular object collides, and you can check with what it collided.
Big thanks for implementing this feature go to Andrzej Kilijański!
Collisions can be checked in two ways:
- By getting a list of colliding TRigidBody objects from TRigidBody.GetCollidingTransforms. Works like
Simple example to demonstrate it is in examples/physics/physics_2d_collisions directory of the engine.
We also have new properties on TRigidBody, and some internal things are now cleaner (again thanks to Andrzej Kilijański!). New properties: