[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