<div dir="auto">If someone can find the correct Blender Python to switch between frames of reference for empties, that would be great.</div><div dir="auto"><br></div><div dir="auto">I’ve not found the correct button on the GUI.</div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Jul 23, 2024 at 9:51 PM John Carlson <<a href="mailto:yottzumm@gmail.com">yottzumm@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:rgb(204,204,204)"><div><br></div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Jul 23, 2024 at 7:32 PM Joe D Williams <<a href="mailto:joedwil@earthlink.net" target="_blank">joedwil@earthlink.net</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:rgb(204,204,204)"><div style="font-family:arial,sans-serif;font-size:12pt;color:rgb(0,0,0)"><p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"><span style="font-family:"Times New Roman";font-size:medium;white-space:normal;float:none;display:inline;color:rgb(0,0,0)">>  Joe, I have exported HAnim as glTF JSON.</span></p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"><span style="font-family:"Times New Roman";font-size:medium;white-space:normal;float:none;display:inline;color:rgb(0,0,0)">  </span></p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"><span style="font-family:"Times New Roman";font-size:medium;white-space:normal;float:none;display:inline;color:rgb(0,0,0)">I have not seen that. gltf has some 'standard' asset types and I was looking for that stuffs. </span></p></div></blockquote><div dir="auto"><br></div><div dir="auto">What were you looking for, I can search to see if the Blender glTF exporter supports it?</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:rgb(204,204,204)"><div style="font-family:arial,sans-serif;font-size:12pt;color:rgb(0,0,0)"><p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif" dir="auto"><span style="font-family:"Times New Roman";font-size:medium;white-space:normal;float:none;display:inline;color:rgb(0,0,0)"></span></p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"><span style="font-family:"Times New Roman";font-size:medium;white-space:normal;float:none;display:inline;color:rgb(0,0,0)">  </span></p>
</div>> I have also used the X3D blender importer and glTF exporter.  We’ve gone over this.
<p style="margin:0.1rem 0px;line-height:1"><span style="font-family:"Times New Roman";font-size:medium;white-space:normal;float:none;display:inline;color:rgb(0,0,0)">  </span></p>
<p style="margin:0.1rem 0px;line-height:1"><span style="font-family:"Times New Roman";font-size:medium;white-space:normal;float:none;display:inline;color:rgb(0,0,0)">Sorry I missed the result. </span></p>
<p style="margin:0.1rem 0px;line-height:1"><span style="font-family:"Times New Roman";font-size:medium;white-space:normal;float:none;display:inline;color:rgb(0,0,0)">I have seen some  simple examples of gltf assets that might be extended to handle hanim and sure they are logical but I still am wondering if it would be best to try and style some 'standard' gltf assets to look more like the special category of app that is of x3d hanim and skeleton-driven animations in general.  </span></p></blockquote><div dir="auto"><br></div><div dir="auto">Do you remember the 146 joint animations that showed up in castle-game-engine, and there was no easy way to select them all, we had to click each one?  That was glTF.  We had a discussion with Michalis about it.  Hopefully he’s clued in for when he  produces glTF from X3D. It blew <a href="http://claude.ai" target="_blank">claude.ai</a>’s brain asking to do parallel animations across multiple keyframes in Blender Python.  I’m just doing one ROUTE at a time myself.  Perhaps approach from a multiple interpolator framework would be better?  How do you convert multiple interpolators into keyframes, if not one by one and ROUTE-based?  Does the standard cover this?  Imagine that I’m *not* simulating an event system, I’m converting from one event system to another.  Understand that, AFAIK, Blender bone animation works the way I’m doing it.</div><div dir="auto"><br></div><div dir="auto">It’s not my responsibility to make the Blender glTF exporter export HAnim.  I don’t want to touch glTF.  I don’t want to become a glTF expert.  That’s for the people interested in hexcode and databases.  I want to create cool Mathematical graphics, do *program* synthesis, and do multiuser systems.  I realize that equation visualization is not a strong point of X3D.  Yes, glTF was one thing I used for API by example (program synthesis).  I’m also interested in X3D API by example.  I don’t even want to break up my equations into triangles or quads, indeed, I’ve raytraced my surfaces with Newton’s Bisection originally.  Later investigation showed that breaking things into triangles might give better results, and that has been my path after poor results with Mathematica, years ago.  If someone can figure out how to find internal ray-surface intersections of self-intersecting spherical equation surfaces without breaking up into triangles or quads and do it in real-time, I’m all ears.</div><div dir="auto"><br></div><div dir="auto">No this is not a “Hey, Mikey” moment yet again.</div><div dir="auto"><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:rgb(204,204,204)"><p style="margin:0.1rem 0px;line-height:1" dir="auto"><span style="font-family:"Times New Roman";font-size:medium;white-space:normal;float:none;display:inline;color:rgb(0,0,0)"></span></p>
<p style="margin:0.1rem 0px;line-height:1"><span style="font-family:"Times New Roman";font-size:medium;white-space:normal;float:none;display:inline;color:rgb(0,0,0)">    </span></p>
<p style="margin:0.1rem 0px;line-height:1"><span style="font-family:"Times New Roman";font-size:medium;white-space:normal;float:none;display:inline;color:rgb(0,0,0)">LOA1 does not show much animation. Is loa4 too many clicks, or what? Trim down the loa3 joekick skeleton to lower loa and you lose a lot but you could still hook up the skin by moving the skincoordindex and weights to remaining parent Joint. I still think best to have loa4 working then drop back to lower loa in steps. Whatever the owner, I still say start with loa4 and take the time to make all the measurements, then only animate the joints you need for your behavior choices. </span></p></blockquote><div dir="auto"><br></div><div dir="auto">LOA4 takes too long to import and load in Blender Python, not to mention export.  It makes programming a chore instead of enjoyable.  One looks for speedier alternatives.  LOA4 is not the problem per se.  We’re not going to finish LOA4 if we continue this path.  Simple examples, aka unit testing is needed at this point.  We’re not even to the point of QA, and you want to do QA testing.  We’re still in early development.  Some small tests succeed, but not with the same code.  So we’re trying to suss out the right code to install in the importer.  Even going into the admin shell to copy the addon to the Blender folder (and you have to remember to do it each time you test) is painful.  Editing in admin mode is a non-starter.</div><div dir="auto"><br></div><div dir="auto">At this point, I’m nearly ready to hand the loader and importer over to the stylesheet folks.</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:rgb(204,204,204)"><p style="margin:0.1rem 0px;line-height:1" dir="auto"><span style="font-family:"Times New Roman";font-size:medium;white-space:normal;float:none;display:inline;color:rgb(0,0,0)"></span></p>
<p style="margin:0.1rem 0px;line-height:1"><span style="font-family:"Times New Roman";font-size:medium;white-space:normal;float:none;display:inline;color:rgb(0,0,0)">  </span></p>
<p style="margin:0.1rem 0px;line-height:1"><span style="font-family:"Times New Roman";font-size:medium;white-space:normal;float:none;display:inline;color:rgb(0,0,0)">> </span><span style="font-size:12pt">Examples without geometry and animation don’t help solving the animation issue, unless one is trying to solve Blender animation. </span></p>
<p style="margin:0.1rem 0px;line-height:1"><span style="font-size:12pt">   </span></p>
<p style="margin:0.1rem 0px;line-height:1"><span style="font-size:12pt">The best would be to transport easily between x3d and blender.  I think blender will do all the x3d stuff like easein/out and maybe even animation using spline curves directly.    </span></p></blockquote><div dir="auto"><br></div><div dir="auto">The problem with Blender is that it uses local transforms for empties, and HAnim uses centers relative to the origin.  Then one throws animation on top of that.   I’ve gotten animation through blender, and simple animations to work.  If we could use Joint centers for Blender bone ends, we’d be lot farther along.  The problem is with attaching objects (empties, not geometry, AFAIK) to bones and armature.  Single skin is the easy case.  I’ve seen examples of multiple geometries connected to armature.  This does not show up as connections to bones in the Blender GUI.  I’m not sure if I’ve seen Blender animation of multiple geometry HAnim that actually works.  I think it’s possible to connect multiple meshes to an armature.  Maybe one can attach an axe to a bone.  I’m not really seeing connecting empties to bones.  Maybe worth a try.</div></div></div><div><div class="gmail_quote"><div dir="auto"><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:rgb(204,204,204)">
<p style="margin:0.1rem 0px;line-height:1"> </p>
<p style="margin:0.1rem 0px;line-height:1"><span style="font-family:"Times New Roman";font-size:medium;white-space:normal;float:none;display:inline;color:rgb(0,0,0)"> </span></p>

<div style="border-left-width:1px;border-left-style:solid;box-sizing:border-box;padding:10px 0px 10px 15px;margin:0px;border-left-color:rgb(170,170,170)">
<p>-----Original Message-----<br>From: John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>><br>Sent: Jul 23, 2024 11:47 AM<br>To: Joe D Williams <<a href="mailto:joedwil@earthlink.net" target="_blank">joedwil@earthlink.net</a>><br>Cc: Andreas Plesch <<a href="mailto:andreasplesch@gmail.com" target="_blank">andreasplesch@gmail.com</a>>, Extensible 3D (X3D) Graphics public discussion <<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a>>, GPU Group <<a href="mailto:gpugroup@gmail.com" target="_blank">gpugroup@gmail.com</a>>, Johannes Behr <<a href="mailto:johannes.behr@threedy.io" target="_blank">johannes.behr@threedy.io</a>>, Subscribed <<a href="mailto:subscribed@noreply.github.com" target="_blank">subscribed@noreply.github.com</a>>, x3dom/x3dom <<a href="mailto:x3dom@noreply.github.com" target="_blank">x3dom@noreply.github.com</a>><br>Subject: Re: [x3d-public] Add quaternion utility methods to X3D SFRotation programming-language standards?</p>
<p style="margin:0.1rem 0px;line-height:1"> </p>
<div>
<div dir="auto">Joe, I have exported HAnim as glTF JSON.  That’s what the Gramps huff with alpha blend mode was all about.  But the source wasn’t X3D, it was Katy.   There’s probably many Blender exportable assets that can be rendered as glTF.  Ask Doug.</div>
<div dir="auto"> </div>
<div dir="auto">I have also used the X3D blender importer and glTF exporter.  We’ve gone over this.  Please try the Blender import/export for yourself before assigning tasks.  There’s an annoying thing where the conversion of the animation creates separate animations in blender export when viewing the glTF.  AFAIK, glTF is not a runtime format, grouping animations is up to the code in addition to glTF (but I think that Michalis would take issue with this); I believe I saw glTF animations with auto start.  There might be a Blender export option.  Perhaps work needs to be done to improve HAnim animation import.  Back to the BVH thing and animation concatenation, and efforts on the Blender loader.  It will take extra effort to identify which animations to convert when all are provided.  I believe I have an example with just one animation.  Joe Kick is a great example.  I had previously worked on roundtripping animation.  I’m thinking any effort on glTF will produce individual animations for each joint.  Playing the animations together is the key.  X3D to X3D is half decent, with stray geometry.  The animation of Jin in Blender itself is awful (Joe Kick has worked), but the loader had shown we can create animations that don’t revolve around the origin.  There’s potential to ignore any Blender animation and go straight to  glTF.  If we have a runtime that can play numerous glTF animations at the same time, there might be further progress.  But expecting me to click 146 animations to turn all of them on is a non-starter.  Especially multiple times.   If someone has Blender python code for grouped animations (I’ll do a search), fess up.</div>
<div dir="auto"> </div>
<div dir="auto">Examples without geometry and animation don’t help solving the animation issue, unless one is trying to solve Blender animation.</div>
<div dir="auto"> </div>
<div dir="auto">Again, a call for an LOA1 animation example.  We can try without geometry.  LOA4 is a time sink at this point.  The tendency for me append LOA4 animation to LOA1 skeleton, and then write Java for cleanup.</div>
<div dir="auto"> </div>
<div dir="auto"> </div>
<div dir="auto">If needed, i can provide compressed X3D JSON examples.  I’m not convinced converting X3D to glTF is going to be smaller.  Unreadable glTF formats, yes.  Do we want unreadable formats?</div>
<div dir="auto"> </div>
<div dir="auto">I believe there are others working on X3D to glTF.  Perhaps Blender is a stumbling block.</div>
</div>
<div dir="auto"> </div>
<div dir="auto">My tendency is to work on HAnim software any format can leverage.</div>
<div dir="auto"> </div>
<div dir="auto">
<div><span style="font-family:-apple-system,helveticaneue;font-size:19px;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;float:none;display:inline!important;color:rgb(0,0,0)">Do you want some beliefware?  That’s what I woke up to this morning.</span></div>
</div>
<div>
<div dir="auto"> </div>
<div dir="auto">John</div>
<div><br>
<div class="gmail_quote">
<div class="gmail_attr" dir="ltr">On Tue, Jul 23, 2024 at 10:49 AM Joe D Williams <<a href="mailto:joedwil@earthlink.net" rel="noopener" target="_blank">joedwil@earthlink.net</a>> wrote:</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:rgb(204,204,204)">
<div style="font-family:arial,sans-serif;font-size:12pt;color:rgb(0,0,0)">
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">yes, this is  a jsonized version of the xml and classic, though looking more like classic by showing container type string, almost like the wrapper tags, but still not having the mindset of the gltf asset composition. </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">Seems like the 'gltf' approach would break it up with an asset for the hierarchy and then maybe separately the geometry and another for the animations. </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">  </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">What I am looking for is, how to do a 'gltf' json encoding that follows some existing 'standard' asset types of json. Has anyone exported HAnim to json using the 'standard' json asset styles? I haven't but think those asset files would look lots different than what we see here.</p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"> </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">The use case would be to compose and test using x3d user code, export to json gltf asset types for delivery. Another would be to import a jsonized hanim asset and convert to edit x3d hanim user code. Or just edit the json(?) with access to the hanim nodes and hierarchy (Joint, Segment, Site) to make it more relatable to HAnim. </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"><span style="font-size:12pt;font-family:arial,sans-serif">  </span></p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"><span style="font-size:12pt;font-family:arial,sans-serif">So, I appreciate this transcoding to show that the json can certainly work to transport x3d hanim, but I don't see a direct use of it because it is no more compact or easier to read or edit than xml or classic. Finally, this does not really match the goals of the gltf, which is to deliver a compact set of assets aimed at runtime, not authortime. </span></p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"><span style="font-size:12pt;font-family:arial,sans-serif">  </span></p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"><span style="font-size:12pt;font-family:arial,sans-serif">some stuff from the metaverse (more x3d members should get involved with the metaverse forum. </span></p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"><span style="font-size:12pt;font-family:arial,sans-serif">Some past info from the forum dealing with gltf:</span></p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"> </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"><span style="font-size:12pt;font-family:arial,sans-serif">2023(ish) gltf development<br> physical materials <br> Tooling (usd <-> gltf) <br> Interactivity <br> Physics <br>Gltf Tools <br> Compression <br> iOS <br> Dampole Viewer <br> Asset Validator <br> Blender<br>gltf Extensions <br> specular anisotropy  <br> WebP<br> GPU Instancing<br> meshopt compression </span></p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"><span style="font-size:12pt;font-family:arial,sans-serif">Physics <br> collision shapes<br> Rigid Bodies<br> Blender Importer/exporter</span></p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"> </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"><span style="font-size:12pt;font-family:arial,sans-serif">Overall, my impression is that gltf is still developing asset definitions for complex hierarchies like needed for hanim and for containing different types of animation data. </span></p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"><span style="font-size:12pt;font-family:arial,sans-serif">And what is a Blendshape?</span></p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"><span style="font-size:12pt;font-family:arial,sans-serif">   </span></p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"><span style="font-size:12pt;font-family:arial,sans-serif">To me, we just need to determine best practice for how x3d hanim user code gets gltfized using 'standard' asset types or if some extended more hanim looking assets need to be styled.</span></p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"><span style="font-size:12pt;font-family:arial,sans-serif">  </span></p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"><span style="font-size:12pt;font-family:arial,sans-serif"><span style="font-size:12pt;font-family:arial,sans-serif">So, John and All, Great and very significant work showing the versatility of x3d. </span></span></p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"><span style="font-size:12pt;font-family:arial,sans-serif">     </span></p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"><span style="font-size:12pt;font-family:arial,sans-serif">Thanks Again and don't forget to suspend your disbelief ... </span></p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"><span style="font-size:12pt;font-family:arial,sans-serif">All Best,</span></p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"><span style="font-size:12pt;font-family:arial,sans-serif">Joe</span></p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"> </p>
</div>
<div style="border-left-width:1px;border-left-style:solid;box-sizing:border-box;padding:10px 0px 10px 15px;margin:0px;border-left-color:rgb(170,170,170)">
<p>-----Original Message-----<br>From: John Carlson <<a href="mailto:yottzumm@gmail.com" rel="noopener" target="_blank">yottzumm@gmail.com</a>><br>Sent: Jul 22, 2024 1:57 PM<br>To: Joe D Williams <<a href="mailto:joedwil@earthlink.net" rel="noopener" target="_blank">joedwil@earthlink.net</a>><br>Cc: Andreas Plesch <<a href="mailto:andreasplesch@gmail.com" rel="noopener" target="_blank">andreasplesch@gmail.com</a>>, Extensible 3D (X3D) Graphics public discussion <<a href="mailto:x3d-public@web3d.org" rel="noopener" target="_blank">x3d-public@web3d.org</a>>, Johannes Behr <<a href="mailto:johannes.behr@threedy.io" rel="noopener" target="_blank">johannes.behr@threedy.io</a>>, Subscribed <<a href="mailto:subscribed@noreply.github.com" rel="noopener" target="_blank">subscribed@noreply.github.com</a>>, x3dom/x3dom <<a href="mailto:x3dom@noreply.github.com" rel="noopener" target="_blank">x3dom@noreply.github.com</a>><br>Subject: Re: [x3d-public] Add quaternion utility methods to X3D SFRotation programming-language standards?</p>
<p style="margin:0.1rem 0px;line-height:1"> </p>
<div dir="auto">There are plenty of HAnim JSON examples if glTF wants to glom on!</div>
<div dir="auto"> </div>
<div dir="auto">See HumanoidAnimation in the X3D archives.</div>
<div dir="auto"> </div>
<div dir="auto">E.g.: </div>
<div dir="auto">
<div><a href="https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Characters/JinLOA4.json" rel="noopener" target="_blank">https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Characters/JinLOA4.json</a></div>
</div>
<div dir="auto"> </div>
<div dir="auto">If you want JSON from X3D, there’s JSON button in X3D-Edit.</div>
<div dir="auto"> </div>
<div dir="auto">X3DJSAIL also offers conversion from XML to JSON.</div>
<div dir="auto"> </div>
<div dir="auto">As does Holger’s x3d-tidy! (use .x3dj).</div>
<div dir="auto"> </div>
<div dir="auto">Sunrize and X_ITE offer viewing of HAnim JSON.</div>
<div dir="auto"> </div>
<div dir="auto">John </div>
<div><br>
<div class="gmail_quote">
<div class="gmail_attr" dir="ltr">On Mon, Jul 22, 2024 at 1:49 PM Joe D Williams <<a href="mailto:joedwil@earthlink.net" rel="noopener" target="_blank">joedwil@earthlink.net</a>> wrote:</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:rgb(204,204,204)">
<div style="font-family:arial,sans-serif;font-size:12pt;color:rgb(0,0,0)">
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">> <span style="font-family:"Times New Roman";font-size:medium;white-space:normal;float:none;display:inline;color:rgb(0,0,0)">My understanding is that there’s a desire to convert between axis-angle (SFRotation) and quaternions.  </span> </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">  </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">Please, when you think of legal gltf quaternion data, you must think of _unit_ quaternions. </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">  </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">This conversion is not a desire, simply that the gltf data and other transport forms use unit quaternions. Thus, if I understand, for example to export native x3d animation data to gltf we would need to convert, and to import we either need to convert to x3d native axis-angle or just use unit quaternions under the covers. But if we wanted to import for working with (editing/refining) the data, such as for orientation interpolators, would need to convert. </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">   </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">So, maybe like the SAI has 3x3 and 4x4 matrix operations, we need a way to convert a single or sequence of axis-angle to quaternion for export and the other way for import. I don't think it is useful to allow unit quaternions in x3d user code for rotations or orientations (just hard to work with handed editing) but it seems like it is unavoidable if we want import/export to gltf. Incidentally, the required gltf forms for skeletal hierarchies and animations are still being worked on by a metaverse forum group for interoperable assets. </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">   </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">Finally, looking at the gltf forms for skeleton transform hierarchies and animations, it seems like x3d should develop a set of hanim gltf assets specifically for hanim that use x3d hanim keywords and structures. From what I have seen, which is not much, the gltf useful for hanim content is very general and abstract to the point of not being directly relatable to hanim user code. </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">   </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">Thanks for some deep thoughts on this,</p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">Joe   </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"> </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"> </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"> </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"> </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"> </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"> </p>
</div>
<div style="border-left-width:1px;border-left-style:solid;box-sizing:border-box;padding:10px 0px 10px 15px;margin:0px;border-left-color:rgb(170,170,170)">
<p>-----Original Message-----<br>From: Extensible 3D (X3D) Graphics public discussion <<a href="mailto:x3d-public@web3d.org" rel="noopener" target="_blank">x3d-public@web3d.org</a>><br>Sent: Jul 21, 2024 7:57 PM<br>To: Extensible 3D (X3D) Graphics public discussion <<a href="mailto:x3d-public@web3d.org" rel="noopener" target="_blank">x3d-public@web3d.org</a>><br>Cc: John Carlson <<a href="mailto:yottzumm@gmail.com" rel="noopener" target="_blank">yottzumm@gmail.com</a>>, x3dom/x3dom <<a href="mailto:x3dom@noreply.github.com" rel="noopener" target="_blank">x3dom@noreply.github.com</a>>, Subscribed <<a href="mailto:subscribed@noreply.github.com" rel="noopener" target="_blank">subscribed@noreply.github.com</a>>, Johannes Behr <<a href="mailto:johannes.behr@threedy.io" rel="noopener" target="_blank">johannes.behr@threedy.io</a>>, Andreas Plesch <<a href="mailto:andreasplesch@gmail.com" rel="noopener" target="_blank">andreasplesch@gmail.com</a>><br>Subject: Re: [x3d-public] Add quaternion utility methods to X3D SFRotation programming-language standards?</p>
<p style="margin:0.1rem 0px;line-height:1"> </p>
<div dir="auto">My understanding is that there’s a desire to convert between axis-angle (SFRotation) and quaternions.  X3DOM has only supported quaternions in the past, looks like there’s progress!  Cross-platform X3D is highly desirable.</div>
<div dir="auto"> </div>
<div dir="auto">Quaternion conversion might be useful to use in Blender export with X3DPSAIL (x3dv.py), but Blender provides utility libraries already, AFAIK.  Mostly, I am setting rotations in OrientationInterpolators for HAnim and other animation.  Rotations also come into play for orienting coordinate axes.  I don’t see quaternions useful there.</div>
<div dir="auto"> </div>
<div dir="auto">
<div><br><span style="font-family:-apple-system,helveticaneue;font-size:19px;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;float:none;display:inline!important;background-color:rgba(0,0,0,0);border-color:rgb(0,0,0);color:rgb(0,0,0)">For Blender import, working on importing animations for transform-like nodes should be paramount, especially in XML, and may require Blender modifications.   If SFRotation methods can help with that, great.   AFAIK, though, there’s no SFRotation class in the importer yet.</span></div>
</div>
<div dir="auto"> </div>
<div dir="auto">I stop here talking about quaternions.  Begin rant.   I’ll peek at the SAI WD now.</div>
<div dir="auto"> </div>
<div dir="auto">
<div dir="auto"><span style="font-family:-apple-system,helveticaneue;font-size:19px;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;float:none;display:inline!important;color:rgb(0,0,0)">For X3DPSAIL, there’s more important considerations like automated DEF/USE (not for static scenegraphs, but for programs that generate many scenegraphs, with a wide variety of functions),  X3D JSON export and integrating container field [ sic ] </span><span style="font-family:-apple-system,helveticaneue;color:rgb(0,0,0)"><span style="font-family:-apple-system,helveticaneue;color:rgb(0,0,0)">output in my mind.   These should be priorities over quaternions.  We both probably understand the pain of X3D JSON; the good news is, we have pretty reasonable stuff to move between that and XML or DOM.   If someone tells me exactly how to read XML, JSON or VRML into an X3DPSAIL scenegraph, I will start looking at how to use X3DPSAIL for Blender import.  One possibility is providing Python import to Blender! I totally understand that!  Providing X3D to Blender Python conversions is critical for that.  See:  </span></span>
<div dir="auto" style="font-family:-apple-system,helveticaneue"><a style="font-family:-apple-system,helveticaneue" href="https://github.com/coderextreme/X3DJSONLD/blob/master/blend/localfinal.py" rel="noopener" target="_blank">https://github.com/coderextreme/X3DJSONLD/blob/master/blend/localfinal.py</a> for x3d blender python loader, which could be the start of a stylesheet.</div>
</div>
</div>
<div dir="auto"> </div>
<div dir="auto"> </div>
<div dir="auto"> </div>
<div dir="auto">Addition of standard vector/matrix  multiplication/inversion operations to X3DJSAIL should be a priority over quaternions.  I don’t know if standard matrix operations are part of SAI or not.  Since we support matrix and vector fields in X3DJSAIL, operations on these seem obvious.   If they are in SAI, X3DJSAIL was lacking as a couple of months ago.  I used vecmath.jar.  I’m as embarrassed as you are!   I realize that’s not the purpose of X3DJSAIL.  A pointer to the documentation doesn’t help here.</div>
<div dir="auto"> </div>
<div dir="auto">More priorities for X3DJSAIL: Comprehensive ways to select all instances of a given class in a scenegraph.   Ways to filter on nodes with an attribute (DEF) present and value (ala HTML DOM and CSS), realizing libraries like JXPath exist (is there something better?). Convenience methods for removing nodes and statements in a set or two from the scenegraph would allow me to deprecate my code.   Understood that this can probably  be done with DOM.  I may wish to load JavaScript into an X3DJSAIL scenegraph as subclasses of X3DJSAIL through class shims (see my X3Dautoclass.js files for graaljs).</div>
<div dir="auto"> </div>
<div dir="auto">Primarily, I am working on HAnim, and making large models feasible in X3DJSAIL Java and CGE’s x3d Pascal library (X3dToPascal.xslt?) would be nice!   Promoting a fluent interface in SAI (setter and adder functions and methods that return a pointer or reference to primary object being worked on) would help with the latter.</div>
<div dir="auto"> </div>
<div dir="auto">Current Pascal generator:</div>
<div dir="auto"><br>
<div dir="auto"><a href="https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/PascalSerializer.js" rel="noopener" target="_blank">https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/PascalSerializer.js</a></div>
<div dir="auto"> </div>
<div dir="auto">
<div dir="auto"><span style="font-family:-apple-system,helveticaneue;font-size:19px;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;float:none;display:inline!important;background-color:rgba(0,0,0,0);border-color:rgb(0,0,0);color:rgb(0,0,0)">These two HAnim .inc files have issues.</span></div>
</div>
<div dir="auto"> </div>
<div dir="auto">
<div><a href="https://github.com/coderextreme/pascalsai/tree/main/code" rel="noopener" target="_blank">https://github.com/coderextreme/pascalsai/tree/main/code</a></div>
</div>
<div dir="auto">If we had a pattern for breaking up a large Java code tree into separate methods , or lengthy Pascal code into “slices” or separate methods, cool.  Maybe some online research would reveal something.  Maybe we have an existing stylesheet, like the ROUTE visualizer?   Hopefully, at some point, I will get some inspiration to solve this problem.  It just seems like a command-line parameter that I haven’t looked up.</div>
</div>
<div dir="auto"> </div>
<div dir="auto">John </div>
<div dir="auto"> </div>
</div>
<div style="border-left-width:1px;border-left-style:solid;box-sizing:border-box;padding:10px 0px 10px 15px;margin:0px;border-left-color:rgb(170,170,170)">
<div dir="auto">On Sun, Jul 21, 2024 at 5:01 PM Brutzman, Donald (Don) (CIV) via x3d-public <<a href="mailto:x3d-public@web3d.org" rel="noopener" target="_blank">x3d-public@web3d.org</a>> wrote:</div>
</div>
<div style="border-left-width:1px;border-left-style:solid;box-sizing:border-box;padding:10px 0px 10px 15px;margin:0px;border-left-color:rgb(170,170,170)">
<div>
<div class="gmail_quote"> </div>
</div>
</div>
<div style="border-left-width:1px;border-left-style:solid;box-sizing:border-box;padding:10px 0px 10px 15px;margin:0px;border-left-color:rgb(170,170,170)">
<div>
<div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:rgb(204,204,204)">
<div>
<div dir="ltr">
<div dir="ltr">Interesting to see in the online issue discussion below that X3DOM includes quaternion methods.</div>
<div dir="ltr"> </div>
<div dir="ltr">The SFRotation representation has some similarity to quaternions, but they are of course mathematically distinct.  Quaternions have long been a suggested alternative for X3D, with SFRotation remaining the primary representation since it is much more reviewable and editable (among other reasons). Nevertheless, for programmers, additional flexibility can be considered without conflict.  This may encourage X3D API usage with other 3D programming libraries.</div>
<div dir="ltr"> </div>
<div dir="ltr">Please consider and advise whether quaternion-based accessor (get and set) utility methods ought to be added to the X3D specifications for SFRotation data type.  Specifically they might become required in X3D Scene Access Interface (SAI), along with all of the future corresponding version 4.0 revisions to X3D programming-language bindings (ECMAScript/JavaScript, Java, C/C++/C#, Python).</div>
<div dir="ltr"> </div>
<div dir="ltr">
<ul style="margin-top:0px;margin-bottom:0px">
<li style="list-style-type:disc"><span style="text-align:start;text-decoration:none;display:inline!important;background-color:rgb(255,255,255)">X3D Scene Access Interface (SAI), version 4.0 draft</span></li>
<li style="list-style-type:disc"><span style="text-align:start;text-decoration:none;display:inline!important;background-color:rgb(255,255,255)"><a href="https://web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-2v4.0-WD1/" rel="noreferrer noopener" target="_blank">https://web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-2v4.0-WD1</a><br></span></li>
</ul>
<div dir="ltr"> </div>
<div dir="ltr">If so, please list what utility methods seem most broadly valuable.  <span style="font-size:inherit">Based on responses, Dick and I will work on crafting a Mantis issue and draft specification prose for further review.</span></div>
<div dir="ltr"> </div>
<div dir="ltr"> </div>
<div dir="ltr">At that point, once reasonably well defined, am also willing to add convenience methods in Java X3DJSAIL and Python X3DPSAIL (x3d.py) libraries for testing.  Contributions of exemplar source code for those libraries will also be welcome, if anyone wants.</div>
<div dir="ltr"> </div>
<div dir="ltr">Further interesting is the possibility that we are not only supporting future X3D programmers, but potentially also supporting Metaverse requirements for 3D Web Interoperability.</div>
<div dir="ltr"> </div>
<div dir="ltr">For those wanting additional background, more information about X3D data types and SFRotation (plus further links) can be found at</div>
<div dir="ltr"> </div>
<div dir="ltr">
<ul style="margin-top:0px;margin-bottom:0px">
<li style="list-style-type:disc">X3D Tooltips 4.0:  field types</li>
<li style="list-style-type:disc"><a href="https://www.web3d.org/x3d/tooltips/X3dTooltips.html#type" rel="noreferrer noopener" target="_blank">https://www.web3d.org/x3d/tooltips/X3dTooltips.html#type</a></li>
<li style="list-style-type:disc"><a href="https://www.web3d.org/x3d/tooltips/X3dTooltips.html#FieldTypesTable" rel="noreferrer noopener" target="_blank">https://www.web3d.org/x3d/tooltips/X3dTooltips.html#FieldTypesTable</a></li>
<li style="list-style-type:disc"><a href="https://www.web3d.org/x3d/tooltips/X3dTooltips.html#SFRotation" rel="noreferrer noopener" target="_blank">https://www.web3d.org/x3d/tooltips/X3dTooltips.html#SFRotation</a></li>
</ul>
</div>
<div dir="ltr"> </div>
<div dir="ltr"><span style="text-decoration:none;display:inline!important;background-color:rgb(255,255,255)">Thanks in advance for considering the possibilities and all feedback.</span></div>
</div>
<div id="m_-3272113100086995601m_8956904824437018907m_6891452564831731226m_6781480920049360972m_8992011280137528788m_6923973795315810644ms-outlook-mobile-signature">
<div dir="ltr">
<p style="margin:0in;font-size:11pt;font-family:Calibri,sans-serif"><span style="font-size:10pt;font-family:"Courier New";line-height:1.5"> </span></p>
<p style="margin:0in;font-size:11pt;font-family:Calibri,sans-serif"><span style="font-size:10pt;font-family:"Courier New";line-height:1.5">all the best, Don</span></p>
<p style="margin:0in;font-size:11pt;font-family:Calibri,sans-serif"><span style="font-size:10pt;font-family:"Courier New";line-height:1.5">--<span style="font-family:"Courier New""> </span></span></p>
<p style="margin:0in;font-size:11pt;font-family:Calibri,sans-serif"><span style="font-size:10pt;font-family:"Courier New";line-height:1.5">Don Brutzman  Naval Postgraduate School, Code USW/Br       <span style="font-family:"Courier New""> </span><span dir="ltr" style="font-family:"Courier New";color:rgb(0,120,212)"><a style="font-family:"Courier New"" href="mailto:brutzman@nps.edu" rel="noopener" target="_blank">brutzman@nps.edu</a></span></span></p>
<p style="margin:0in;font-size:11pt;font-family:Calibri,sans-serif"><span style="font-size:10pt;font-family:"Courier New";line-height:1.5">Watkins 270,  MOVES Institute, Monterey CA 93943-5000 USA   <span style="font-family:"Courier New""> </span><span dir="ltr" style="font-family:"Courier New";color:rgb(0,120,212)">+1.831.656.2149</span></span></p>
<div style="margin:0px 0in;font-size:11pt;font-family:Calibri,sans-serif"><span style="font-size:10pt;font-family:"Courier New";line-height:1.5">X3D graphics, virtual worlds, Navy robotics </span><span style="font-size:10pt;font-family:"Courier New";line-height:1.5"><span dir="ltr" style="font-family:"Courier New";color:rgb(0,120,212)"><a style="font-family:"Courier New"" href="https://faculty.nps.edu/brutzman" rel="noopener" target="_blank">https://faculty.nps.edu/brutzman</a></span></span></div>
</div>
</div>
<div id="m_-3272113100086995601m_8956904824437018907m_6891452564831731226m_6781480920049360972m_8992011280137528788m_6923973795315810644mail-editor-reference-message-container"><hr style="display:inline-block;width:98%">
<div id="m_-3272113100086995601m_8956904824437018907m_6891452564831731226m_6781480920049360972m_8992011280137528788m_6923973795315810644divRplyFwdMsg" dir="ltr"><span style="font-family:Calibri,sans-serif;color:rgb(0,0,0)"><span style="font-family:Calibri,sans-serif;color:rgb(0,0,0)"><strong style="font-family:Calibri,sans-serif">From:</strong> Andreas Plesch <<a style="font-family:Calibri,sans-serif" href="mailto:notifications@github.com" rel="noopener" target="_blank">notifications@github.com</a>><br><strong style="font-family:Calibri,sans-serif">Sent:</strong> Wednesday, June 26, 2024 11:03 AM<br><strong style="font-family:Calibri,sans-serif">To:</strong> x3dom/x3dom <<a style="font-family:Calibri,sans-serif" href="mailto:x3dom@noreply.github.com" rel="noopener" target="_blank">x3dom@noreply.github.com</a>><br><strong style="font-family:Calibri,sans-serif">Cc:</strong> Subscribed <<a style="font-family:Calibri,sans-serif" href="mailto:subscribed@noreply.github.com" rel="noopener" target="_blank">subscribed@noreply.github.com</a>><br><strong style="font-family:Calibri,sans-serif">Subject:</strong> Re: [x3dom/x3dom] SFMatrix4f() documentation for setRotation and translation (Issue #1322)</span></span>
<div dir="ltr" style="font-family:Calibri,sans-serif"> </div>
</div>
<p> </p>
<div>
<p> </p>
<p dir="auto">SFRotation field methods are also available but less well tested.</p>
<p dir="auto">SAI code may look like this:</p>
<pre class="notranslate" style="font-family:monospace"><code class="notranslate" style="font-family:monospace">SFRot90 = x3dom.fields.SFRotation(1, 0, 0, 1.57);
locR = SFRot90.multiVec(hitP);
trans = new x3dom.fields.SFVec3f(440000, 3670000, 0);
locT = locR.add(trans);
</code></pre>
<p style="font-size:small;color:rgb(102,102,102)">—<br>Reply to this email directly, <a href="https://github.com/x3dom/x3dom/issues/1322#issuecomment-2192318975" rel="noopener" target="_blank"> view it on GitHub</a>, or <a href="https://github.com/notifications/unsubscribe-auth/AB23BYDQOLK25VKQG3TBTJ3ZJL65PAVCNFSM6AAAAABJRIL4AOVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCOJSGMYTQOJXGU" rel="noopener" target="_blank"> unsubscribe</a>.<br>You are receiving this because you are subscribed to this thread.<img src="https://github.com/notifications/beacon/AB23BYGS6BIVFIP6Y7ZQM3LZJL65PA5CNFSM6AAAAABJRIL4AOWGG33NNVSW45C7OR4XAZNMJFZXG5LFINXW23LFNZ2KUY3PNVWWK3TUL5UWJTUCVQQ76.gif" alt="" width="1" height="1"><span style="font-size:0px;display:none;overflow:hidden;opacity:0;width:0px;height:0px;max-width:0px;max-height:0px;color:transparent">Message ID: <x3dom/x3dom/issues/1322/<a href="mailto:2192318975@github.com" rel="noopener" target="_blank">2192318975@github.com</a>></span></p>
</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
<div style="border-left-width:1px;border-left-style:solid;box-sizing:border-box;padding:10px 0px 10px 15px;margin:0px;border-left-color:rgb(170,170,170)">
<div>
<div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:rgb(204,204,204)">_______________________________________________</blockquote>
</div>
</div>
</div>
<div style="border-left-width:1px;border-left-style:solid;box-sizing:border-box;padding:10px 0px 10px 15px;margin:0px;border-left-color:rgb(170,170,170)">
<div>
<div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:rgb(204,204,204)"><br>x3d-public mailing list<br><a href="mailto:x3d-public@web3d.org" rel="noopener" target="_blank">x3d-public@web3d.org</a><br><a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org" rel="noopener noreferrer" target="_blank">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a></blockquote>
</div>
</div>
</div>
<p style="margin:0.1rem 0px;line-height:1"> </p>
</blockquote>
</div>
</div>
</div>
<p style="margin:0.1rem 0px;line-height:1"> </p>
</blockquote>
</div>
</div>
</div>
</div>

<p style="margin:0.1rem 0px;line-height:1"> </p></blockquote></div></div>
</blockquote></div></div>