[x3d-public] Add quaternion utility methods to X3D SFRotation programming-language standards?

John Carlson yottzumm at gmail.com
Sun Jul 21 19:56:24 PDT 2024


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/20240721/d8e707d9/attachment-0001.html>


More information about the x3d-public mailing list