[x3d-public] Gimbals and ArbitraryAxisCylinderSensor rotation examples

Don Brutzman don.brutzman at gmail.com
Wed Aug 13 06:56:34 PDT 2025


thanks for noting questions, Joe.  this is all resolvable with carefully
precise mathematical thinking.

some clarifications for HAnim specification:

   - x-y-z are an axis
   - x-y-z (axis) plus an angle is a rotation
   - every rotation is relative to its parent coordinate frame, creating a
   new coordinate frame
   - this is both rendering and animation basis of HAnimJoint hierarchy
   - careful reading of HAnimJoint llimit and ulimit field definitions
   shows that they are a SFVec3f 3-tuple axis constraint,
   - careful reading of HAnimJoint limitOrientation shows it allows
   reorienting limits within an HAnimJoint
   - those fields are all defined in spec already, we are trying to work
   with them as written,
   - those fields do not constrain orientation fully, only the axes (pretty
   curiously insufficient),
   - adding minAngle/maxAngle means we can fully constrain a joints
   orientation.

some clarifications regarding the two X3D examples passed:

   - CylinderSensor constraints a given axis and allows varying angle,
   - the gimbals superimpose 3 independent CylinderSensor rotation angles,
   in a nested fashion around 3 coordinate frames, to act on a single
   transformation's coordinate frame,
   - multiple labeling and representation approaches are possible, and
   computable, either for single rotations or nested roll-pitch-yaw rotation
   about x-y-z axes respectively,
   - any single arbitrary axis-angle rotation can be mathematically
   decomposed and equivalently represented as three simultaneous nested
   rotations about perpendicular axes (for example roll-pitch-yaw),
   - the gimbals example lets you perform any three perpendicular rotations
   to arrive at a single composed rotation, also showing computed axis-angle
   values (see console for further data),
   - all labeling and representations are different ways of describing a
   single unique representation.
   - these widgets might help us rotate a joint (one at a time please) and
   show range of motion (ROM) constraints understandably.

it takes a while to put these concepts together, hope this explains a
little better.

saving grace:  whether in real world or in virtual 3d world, any object
exists at exactly one location and exactly one orientation, regardless of
however you might want to represent that mathematically.

p.s. am personally glad we are each in one place at one time, oriented in
one direction at each time!  🫣

have fun taking apart and reassembling rotations in X3D and HAnim!

all the best, Don




On Tue, Aug 12, 2025 at 2:03 PM Joe D Williams <joedwil at earthlink.net>
wrote:

> >  roll-pitch-yaw
>
>
>
> that is a different coordinate system than std x3d and glTF, and the gl.
>
> maybe does not make any dif for gimbal example, just recall that
>
> std x3d is pitch-yaw-roll.
>
> Note GeoPose uses coord sys like gimbal example.
>
>
>
> Thanks but I still think we need min and max for 3 axes, all independent.
>
> I think best to be able to define min for x y z as a single axis-angle
> value
>
> and x y z max as a single axis-angle value then tool can find limit values
>
> from those.
>
> Thanks and Fun,
>
> Joe
>
>
>
> -----Original Message-----
> From: Don Brutzman <don.brutzman at gmail.com>
> Sent: Aug 11, 2025 7:05 PM
> To: Carol McDonald <cemd2 at comcast.net>, Joe D Williams <
> joedwil at earthlink.net>, Richard F. Puk <puk at igraphics.com>
> Cc: <h-anim at web3d.org>, X3D Public Mailing List <x3d-public at web3d.org>
> Subject: Gimbals and ArbitraryAxisCylinderSensor rotation examples
>
>
> Here are the roll-pitch-yaw rotation examples we explored during today's
> call.  Useful widgets.
>
> General index link for gimbals example:
>
>    - *X3D Example Archives: *
> *Basic, Distributed Interactive Simulation, Gimbals *
>    -
>    *https://www.web3d.org/x3d/content/Basic/DistributedInteractiveSimulation/GimbalsIndex.html*
>    <https://www.web3d.org/x3d/content/Basic/DistributedInteractiveSimulation/GimbalsIndex.html>
>    -
>    https://www.web3d.org/x3d/content/Basic/DistributedInteractiveSimulation/GimbalsExampleX_ITE.png
>
> General index link for cylinder sensor example:
>
>    - *X3D Example Archives: *
> *Savage, Tools, Animation, Arbitrary Axis Cylinder Sensor Examples *
>    -
>    *https://savage.nps.edu/Savage/Tools/Animation/ArbitraryAxisCylinderSensorExamplesIndex.html*
>    <https://savage.nps.edu/Savage/Tools/Animation/ArbitraryAxisCylinderSensorExamplesIndex.html>
>
>    - (sourceforge copy
>    <https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/content/examples/Savage/Tools/Animation/ArbitraryAxisCylinderSensorExamples.rotated.png>
>    )
>    - (forked archive soon to migrate to web3d.org so future url addresses
>    will change)
>
> Hopefully these illustrate why I think it is possible for us to control
> and constrain rotations to predefine Range of Motion (ROM) in an
> HAnimJoint.  As ever, implementation and evaluation is necessary.
>
> This is slightly analagous to the joint widgets in the amazing video that
> Aaron shared.
>
>    - antCGi Rigging & Animation Tools Preview
>    - https://youtu.be/CY7TKtalFaQ?t=62
>
> *Suggested implementation approach, next steps:*
> *- *use the Cylinder Sensor approach, which is a prototype, with a single
> humanoid joint
> - get comfortable with that, maybe the Red Box roll, Green
> - i turn the gimbals model into a reusable prototype as well
> - we hook that up as yet-another way to animate a humanoid joint too
> - then figure out good ways to illustrate HAnimJoint minAngle/maxAngle
> range of motion (ROM) examples.
>
> Onward we go...  Have fun with X3D and HAnim!  😀
>
> all the best, Don
>
>
>
>
>
> Attachments area
> Preview YouTube video antCGi Rigging & Animation Tools Preview
> <https://www.youtube.com/watch?v=CY7TKtalFaQ&t=62&authuser=0>
>
>
>
> <https://www.youtube.com/watch?v=CY7TKtalFaQ&t=62&authuser=0>
>
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20250813/b08bf7ba/attachment.html>


More information about the x3d-public mailing list