<div style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:12pt"><p style="margin: 0.1rem 0; line-height: 1.0;">> <span style="color: #000000; font-family: 'Segoe UI'; font-size: small; white-space: normal; float: none; display: inline;"> roll-pitch-yaw</span> </p>
<p style="margin: 0.1rem 0; line-height: 1.0;"> </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">that is a different coordinate system than std x3d and glTF, and the gl. </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">maybe does not make any dif for gimbal example, just recall that </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">std x3d is pitch-yaw-roll.</p>
<p style="margin: 0.1rem 0; line-height: 1.0;">Note GeoPose uses coord sys like gimbal example. </p>
<p style="margin: 0.1rem 0; line-height: 1.0;"> </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">Thanks but I still think we need min and max for 3 axes, all independent. </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">I think best to be able to define min for x y z as a single axis-angle value </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">and x y z max as a single axis-angle value then tool can find limit values </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">from those. </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">Thanks and Fun,</p>
<p style="margin: 0.1rem 0; line-height: 1.0;">Joe </p>
<p style="margin: 0.1rem 0; line-height: 1.0;"> </p>
</div>
<div class="elnk-inline-message-container" style="border-left: 1px solid #aaa; box-sizing: border-box; padding: 10px 0 10px 15px; margin: 0;">
<p>-----Original Message-----<br>From: Don Brutzman <don.brutzman@gmail.com><br>Sent: Aug 11, 2025 7:05 PM<br>To: Carol McDonald <cemd2@comcast.net>, Joe D Williams <joedwil@earthlink.net>, Richard F. Puk <puk@igraphics.com><br>Cc: <h-anim@web3d.org>, X3D Public Mailing List <x3d-public@web3d.org><br>Subject: Gimbals and ArbitraryAxisCylinderSensor rotation examples</p>
<p style="margin: 0.1rem 0; line-height: 1.0;"> </p>
<div dir="ltr">
<div class="gmail-gs" style="margin: 0px; min-width: 0px; padding: 0px 0px 20px; width: auto; font-family: 'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif; font-size: medium;">
<div class="gmail-">
<div id="gmail-:86" class="gmail-ii gmail-gt" style="direction: ltr; margin: 8px 0px 0px; padding: 0px; font-size: 0.875rem; overflow-x: hidden;">
<div id="gmail-:87" class="gmail-a3s gmail-aiL" style="direction: ltr; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-alternates: normal; font-size-adjust: none; font-kerning: auto; font-feature-settings: normal; font-stretch: normal; font-size: small; line-height: 1.5; font-family: Arial,Helvetica,sans-serif; overflow: auto hidden;">
<div dir="ltr">
<div dir="ltr"><span style="font-family: 'Segoe UI';">Here are the roll-pitch-yaw rotation examples we explored during today's call.  Useful widgets.</span>
<div><span style="font-family: 'Segoe UI';"> </span></div>
<div><span style="font-family: 'Segoe UI';"><span style="font-family: 'Segoe UI';">General index link for gimbals example:<br></span></span>
<ul>
<li style="margin-left: 15px;"><strong><em>X3D Example Archives: </em></strong><strong>Basic, Distributed Interactive Simulation, Gimbals<br></strong></li>
<li style="margin-left: 15px;"><a href="https://www.web3d.org/x3d/content/Basic/DistributedInteractiveSimulation/GimbalsIndex.html" target="_blank" rel="noopener"><strong>https://www.web3d.org/x3d/content/Basic/DistributedInteractiveSimulation/GimbalsIndex.html</strong></a></li>
<li style="margin-left: 15px;"><a href="https://www.web3d.org/x3d/content/Basic/DistributedInteractiveSimulation/GimbalsExampleX_ITE.png" target="_blank" rel="noopener">https://www.web3d.org/x3d/content/Basic/DistributedInteractiveSimulation/GimbalsExampleX_ITE.png</a></li>
<li style="margin-left: 15px;"><img class="gmail-CToWUd gmail-a6T" style="cursor: pointer; outline: 0px; margin-right: 0px;" tabindex="0" src="cid:1d5e04af-bb02-4ba1-b63f-f6f53459ce5e" alt="image.png" width="224" height="134"></li>
</ul>
<span style="font-family: 'Segoe UI';"><span style="font-family: 'Segoe UI';"><br>General index link for cylinder sensor example:<br></span></span>
<ul>
<li style="margin-left: 15px;"><strong><em>X3D Example Archives: </em></strong><strong>Savage, Tools, Animation, Arbitrary Axis Cylinder Sensor Examples<br></strong></li>
<li style="margin-left: 15px;"><a href="https://savage.nps.edu/Savage/Tools/Animation/ArbitraryAxisCylinderSensorExamplesIndex.html" target="_blank" rel="noopener"><strong>https://savage.nps.edu/Savage/Tools/Animation/ArbitraryAxisCylinderSensorExamplesIndex.html</strong></a><strong> </strong> </li>
<li style="margin-left: 15px;">(<a href="https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/content/examples/Savage/Tools/Animation/ArbitraryAxisCylinderSensorExamples.rotated.png" target="_blank" rel="noopener">sourceforge copy</a>)</li>
<li style="margin-left: 15px;"><img class="gmail-CToWUd gmail-a6T" style="cursor: pointer; outline: 0px; margin-right: 0px;" tabindex="0" src="cid:cff911c2-3b60-4582-b4a1-03611b807461" alt="image.png" width="224" height="153"></li>
<li style="margin-left: 15px;">(forked archive soon to migrate to <a href="http://web3d.org/" target="_blank" rel="noopener">web3d.org</a> so future url addresses will change)</li>
</ul>
</div>
<div><span style="font-family: 'Segoe UI';">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.</span></div>
<div><span style="font-family: Segoe UI;"> </span></div>
<div><span style="font-family: Segoe UI;">This is slightly analagous to the joint widgets in the amazing video that Aaron shared.</span></div>
<div>
<ul>
<li style="margin-left: 15px;"><span style="font-family: Segoe UI;">antCGi Rigging & Animation Tools Preview</span></li>
<li style="margin-left: 15px;"><span style="font-family: Segoe UI;"><a href="https://youtu.be/CY7TKtalFaQ?t=62" target="_blank" rel="noopener">https://youtu.be/CY7TKtalFaQ?t=62</a></span></li>
<li style="margin-left: 15px;"><span style="font-family: Segoe UI;"><img class="gmail-CToWUd gmail-a6T" style="cursor: pointer; outline: 0px; margin-right: 0px;" tabindex="0" src="cid:eba86de7-54f9-4d06-aa9a-d1e17b21d703" alt="image.png" width="174" height="98"><br></span></li>
</ul>
</div>
<div><span style="font-family: 'Segoe UI';"><strong> </strong></span></div>
<div><span style="font-family: 'Segoe UI';"><strong>Suggested implementation approach, next steps:</strong></span></div>
<div><span style="font-family: 'Segoe UI';"><strong>- </strong>use the Cylinder Sensor approach, which is a prototype, with a single </span><span style="font-family: 'Segoe UI';">humanoid</span><span style="font-family: 'Segoe UI';"> joint</span></div>
<div><span style="font-family: 'Segoe UI';">- get comfortable with that, maybe the Red Box roll, Green </span></div>
<div><span style="font-family: Segoe UI;">- i turn the gimbals model into a reusable prototype as well</span></div>
<div><span style="font-family: Segoe UI;">- we hook that up as yet-another way to animate a humanoid joint too</span></div>
<div><span style="font-family: Segoe UI;">- then figure out good ways to illustrate HAnimJoint minAngle/maxAngle range of motion (ROM) examples.</span></div>
<div><span style="font-family: Segoe UI;"> </span></div>
<div><span style="font-family: Segoe UI;">Onward we go...  Have fun with X3D and HAnim!  ðŸ˜€</span></div>
<div><span style="font-family: Segoe UI;"> </span></div>
<div><span style="font-family: Segoe UI;">all the best, Don</span></div>
<div><span style="font-family: Segoe UI;"> </span></div>
</div>
<div class="gmail-yj6qo"> </div>
<div class="gmail-adL"> </div>
</div>
<div class="gmail-adL"> </div>
</div>
</div>
<div id="gmail-:7w" class="gmail-hq gmail-gt gmail-a10" style="font-size: 0.875rem; margin: 15px 0px; clear: both;">
<div class="gmail-hp" style="width: 608px; border-top: 1px dotted #d8d8d8;"> </div>
<div class="gmail-a3I" style="width: 1px; height: 1px; overflow: hidden;">Attachments area</div>
<div id="gmail-:7q"></div>
<div id="gmail-:7v" class="gmail-aQH" style="padding-top: 16px;"><span class="gmail-aZo" style="display: block; float: left; margin: 0px 0px 16px 16px; height: 120px; width: 180px;"><span class="gmail-aZo" style="display: block; float: left; margin: 0px 0px 16px 16px; height: 120px; width: 180px;"><a class="gmail-aQy gmail-aZR gmail-e gmail-aZr" style="color: #222222; text-decoration-line: none; display: inline-block; height: 120px; width: 180px; overflow: hidden; outline: none;" tabindex="0" role="link" href="https://www.youtube.com/watch?v=CY7TKtalFaQ&t=62&authuser=0" target="_blank" rel="noopener"><span id="gmail-:1i2" class="gmail-a3I" style="width: 1px; height: 1px; overflow: hidden;">Preview YouTube video antCGi Rigging & Animation Tools Preview</span></a></span></span>
<div aria-hidden="true">
<div class="gmail-aSG" style="background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-origin: initial; background-clip: initial; margin: auto;"> </div>
<div class="gmail-aVY gmail-aZn" style="overflow: visible; height: 0px; border-top: 1px solid #e5e5e5;">
<div class="gmail-aZm" style="width: 0px; height: 118px; border-left: 1px solid #e5e5e5;"> </div>
</div>
<div class="gmail-aSH" style="overflow: hidden;"><img id="gmail-:1hz" class="gmail-aQG gmail-aYB" style="transition: opacity 0.5s linear; opacity: 1; border: none; margin: auto; inset: -11.8px -17.8px; max-width: 120%; min-width: 100%;" src="https://i.ytimg.com/vi/CY7TKtalFaQ/hqdefault.jpg">
<div id="gmail-:1gz" class="gmail-aYy" style="background-color: rgba(0,0,0,0.4); border-top: none;">
<div class="gmail-aYA" style="float: left; display: flex; height: 32px; width: 32px;"><img id="gmail-:1h1" class="gmail-aSM" style="width: 16px; height: 16px; border: none;" src="https://ssl.gstatic.com/docs/doclist/images/mediatype/icon_2_youtube_x16.png"></div>
<div class="gmail-aYz" style="overflow: hidden;">
<div class="gmail-a12">
<div class="gmail-aQA" style="overflow: hidden; text-overflow: ellipsis; color: #777777; font-size: 12px; font-weight: bold; line-height: 16px; margin-right: 32px; margin-top: 8px;"> </div>
</div>
</div>
</div>
</div>
<div class="gmail-aSI" style="height: 20px; width: 20px; border-right: 20px solid transparent;">
<div id="gmail-:1i4" class="gmail-aSJ" style="width: 0px; height: 0px; opacity: 0.5; border: 10px solid #777777;"></div>
</div>
</div>
<span class="gmail-aZo" style="display: block; float: left; margin: 0px 0px 16px 16px; height: 120px; width: 180px;"><a id="gmail-:7p" class="gmail-aQy gmail-aZR gmail-e gmail-aZr" style="color: #222222; text-decoration-line: none; display: inline-block; height: 120px; width: 180px; overflow: hidden; outline: none;" tabindex="0" role="link" href="https://www.youtube.com/watch?v=CY7TKtalFaQ&t=62&authuser=0" target="_blank" rel="noopener"></a></span>
<div class="gmail-aZK" style="height: 0px; overflow: hidden; clear: both;"> </div>
</div>
</div>
<div class="gmail-WhmR8e" style="clear: both;"> </div>
</div>
</div>
</div>
</div>

<p style="margin: 0.1rem 0; line-height: 1.0;"> </p>