[x3d-public] Add quaternion utility methods to X3D SFRotation programming-language standards?
John Carlson
yottzumm at gmail.com
Mon Jul 22 13:56:51 PDT 2024
There are plenty of HAnim JSON examples if glTF wants to glom on!
See HumanoidAnimation in the X3D archives.
E.g.:
https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Characters/JinLOA4.json
If you want JSON from X3D, there’s JSON button in X3D-Edit.
X3DJSAIL also offers conversion from XML to JSON.
As does Holger’s x3d-tidy! (use .x3dj).
Sunrize and X_ITE offer viewing of HAnim JSON.
John
On Mon, Jul 22, 2024 at 1:49 PM Joe D Williams <joedwil at earthlink.net>
wrote:
> > My understanding is that there’s a desire to convert between axis-angle
> (SFRotation) and quaternions.
>
>
>
> Please, when you think of legal gltf quaternion data, you must think of
> _unit_ quaternions.
>
>
>
> 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.
>
>
>
> 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.
>
>
>
> 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.
>
>
>
> Thanks for some deep thoughts on this,
>
> Joe
>
>
>
>
>
>
>
>
>
>
>
>
>
> -----Original Message-----
> From: Extensible 3D (X3D) Graphics public discussion <x3d-public at web3d.org
> >
> Sent: Jul 21, 2024 7:57 PM
> To: Extensible 3D (X3D) Graphics public discussion <x3d-public at web3d.org>
> Cc: John Carlson <yottzumm at gmail.com>, x3dom/x3dom <
> x3dom at noreply.github.com>, Subscribed <subscribed at noreply.github.com>,
> Johannes Behr <johannes.behr at threedy.io>, Andreas Plesch <
> andreasplesch at gmail.com>
> Subject: Re: [x3d-public] Add quaternion utility methods to X3D SFRotation
> programming-language standards?
>
>
> 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.
>
> 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.
>
>
> 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.
>
> I stop here talking about quaternions. Begin rant. I’ll peek at the SAI
> WD now.
>
> 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 ] 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:
> https://github.com/coderextreme/X3DJSONLD/blob/master/blend/localfinal.py for
> x3d blender python loader, which could be the start of a stylesheet.
>
>
>
> 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.
>
> 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).
>
> 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.
>
> Current Pascal generator:
>
>
> https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/PascalSerializer.js
>
> These two HAnim .inc files have issues.
>
> https://github.com/coderextreme/pascalsai/tree/main/code
> 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.
>
> John
>
> On Sun, Jul 21, 2024 at 5:01 PM Brutzman, Donald (Don) (CIV) via
> x3d-public <x3d-public at web3d.org> wrote:
>
>> Interesting to see in the online issue discussion below that X3DOM
>> includes quaternion methods.
>>
>> 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.
>>
>> 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).
>>
>>
>> - X3D Scene Access Interface (SAI), version 4.0 draft
>> - https://web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-2v4.0-WD1
>>
>>
>> If so, please list what utility methods seem most broadly valuable. Based
>> on responses, Dick and I will work on crafting a Mantis issue and draft
>> specification prose for further review.
>>
>>
>> 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.
>>
>> Further interesting is the possibility that we are not only supporting
>> future X3D programmers, but potentially also supporting Metaverse
>> requirements for 3D Web Interoperability.
>>
>> For those wanting additional background, more information about X3D data
>> types and SFRotation (plus further links) can be found at
>>
>>
>> - X3D Tooltips 4.0: field types
>> - https://www.web3d.org/x3d/tooltips/X3dTooltips.html#type
>> - https://www.web3d.org/x3d/tooltips/X3dTooltips.html#FieldTypesTable
>> - https://www.web3d.org/x3d/tooltips/X3dTooltips.html#SFRotation
>>
>>
>> Thanks in advance for considering the possibilities and all feedback.
>>
>>
>>
>> all the best, Don
>>
>> --
>>
>> Don Brutzman Naval Postgraduate School, Code USW/Br
>> brutzman at nps.edu
>>
>> Watkins 270, MOVES Institute, Monterey CA 93943-5000 USA
>> +1.831.656.2149
>> X3D graphics, virtual worlds, Navy robotics
>> https://faculty.nps.edu/brutzman
>> ------------------------------
>> *From:* Andreas Plesch <notifications at github.com>
>> *Sent:* Wednesday, June 26, 2024 11:03 AM
>> *To:* x3dom/x3dom <x3dom at noreply.github.com>
>> *Cc:* Subscribed <subscribed at noreply.github.com>
>> *Subject:* Re: [x3dom/x3dom] SFMatrix4f() documentation for setRotation
>> and translation (Issue #1322)
>>
>>
>>
>>
>>
>>
>> SFRotation field methods are also available but less well tested.
>>
>> SAI code may look like this:
>>
>> 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);
>>
>> —
>> Reply to this email directly, view it on GitHub
>> <https://github.com/x3dom/x3dom/issues/1322#issuecomment-2192318975>, or
>> unsubscribe
>> <https://github.com/notifications/unsubscribe-auth/AB23BYDQOLK25VKQG3TBTJ3ZJL65PAVCNFSM6AAAAABJRIL4AOVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCOJSGMYTQOJXGU>
>> .
>> You are receiving this because you are subscribed to this thread.Message
>> ID: <x3dom/x3dom/issues/1322/2192318975 at github.com>
>>
> _______________________________________________
>
>
>> x3d-public mailing list
>> x3d-public at web3d.org
>> http://web3d.org/mailman/listinfo/x3d-public_web3d.org
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20240722/fe4f3b0e/attachment-0001.html>
More information about the x3d-public
mailing list