[x3d-public] X3DParticleEmitter node inherit fromX3DChildNode(rather than X3DNode)

Andreas Plesch andreasplesch at gmail.com
Thu Mar 10 14:28:40 PST 2022


>
>
>
> Likely we should create a set of examples from each of the languages
> you’ve listed (and more) to show how to do it.
>

Here is a start:

- svg

https://developer.mozilla.org/en-US/docs/Web/SVG/Element/defs
https://www.w3.org/html/wiki/SVGElements/defs

- glTF


https://www.khronos.org/registry/glTF/specs/2.0/glTF-2.0.html#indices-and-names

by index into a library array


- a-frame


https://aframe.io/docs/1.3.0/core/asset-management-system.html

https://aframe.io/docs/1.3.0/core/mixins.html


- collada

https://www.khronos.org/files/collada_reference_card_1_4.pdf : The
library_* elements (modules)

All of those have examples, except for collada. Perhaps I can collect the
examples and put them onto a wiki page.

Cheers, Andreas

PS: Here is a collada conversion of the simple gltf box at
https://github.com/KhronosGroup/glTF-Sample-Models/blob/master/2.0/Box/glTF/Box.gltf

<?xml version="1.0" encoding="utf-8"?>
<COLLADA version="1.5.0" xmlns="http://www.collada.org/2008/03/COLLADASchema
">
  <asset>
    <contributor />
    <unit meter="1" />
  </asset>
  <library_lights />
  <library_materials>
    <material id="Red" name="Red">
      <instance_effect url="#effect-Red" />
    </material>
  </library_materials>
  <library_effects>
    <effect id="effect-Red" />
  </library_effects>
  <library_cameras />
  <library_geometries>
    <geometry id="mesh_1">
      <mesh>
        <source id="mesh_1-position" name="position">
          <float_array id="mesh_1-position-array" count="72">-0.5 -0.5 0.5
0.5 -0.5 0.5 -0.5 0.5 0.5 0.5 0.5 0.5 0.5 -0.5 0.5 -0.5 -0.5 0.5 0.5 -0.5
-0.5 -0.5 -0.5 -0.5 0.5 0.5 0.5 0.5 -0.5 0.5 0.5 0.5 -0.5 0.5 -0.5 -0.5
-0.5 0.5 0.5 0.5 0.5 0.5 -0.5 0.5 -0.5 0.5 0.5 -0.5 -0.5 -0.5 0.5 -0.5 0.5
0.5 -0.5 -0.5 -0.5 -0.5 0.5 -0.5 -0.5 -0.5 -0.5 -0.5 0.5 -0.5 0.5 -0.5 -0.5
0.5 0.5 -0.5 </float_array>
          <technique_common>
            <accessor source="#mesh_1-position-array" count="24" stride="3">
              <param name="X" type="float" />
              <param name="Y" type="float" />
              <param name="Z" type="float" />
            </accessor>
          </technique_common>
        </source>
        <source id="mesh_1-normal" name="normal">
          <float_array id="mesh_1-normal-array" count="72">0 0 1 0 0 1 0 0
1 0 0 1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1
0 0 1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1
</float_array>
          <technique_common>
            <accessor source="#mesh_1-normal-array" count="24" stride="3">
              <param name="X" type="float" />
              <param name="Y" type="float" />
              <param name="Z" type="float" />
            </accessor>
          </technique_common>
        </source>
        <vertices id="mesh_1-vertices">
          <input semantic="POSITION" source="#mesh_1-position" />
        </vertices>
        <triangles material="default" count="12">
          <input semantic="VERTEX" source="#mesh_1-vertices" offset="0" />
          <input semantic="NORMAL" source="#mesh_1-normal" offset="1" />
          <p>0 0 1 1 2 2 3 3 2 2 1 1 4 4 5 5 6 6 7 7 6 6 5 5 8 8 9 9 10 10
11 11 10 10 9 9 12 12 13 13 14 14 15 15 14 14 13 13 16 16 17 17 18 18 19 19
18 18 17 17 20 20 21 21 22 22 23 23 22 22 21 21</p>
        </triangles>
      </mesh>
    </geometry>
  </library_geometries>
  <library_images />
  <library_visual_scenes>
    <visual_scene id="Scene">
      <node id="Node--0" sid="Node--0" name="Node #0" type="NODE">
        <matrix>1 0 0 0 0 0 1 0 0 -1 0 0 0 0 0 1</matrix>
        <node id="Node--1" sid="Node--1" name="Node #1" type="NODE">
          <matrix>1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1</matrix>
          <instance_geometry url="#mesh_1">
            <bind_material>
              <technique_common>
                <instance_material symbol="mat0" target="#Red" />
              </technique_common>
            </bind_material>
          </instance_geometry>
        </node>
      </node>
    </visual_scene>
  </library_visual_scenes>
  <library_animations />
  <scene>
    <instance_visual_scene url="#Scene" />
  </scene>
</COLLADA>

Test cases welcome.
>
>
>
> 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 <andreasplesch at gmail.com>
> *Sent:* Thursday, March 10, 2022 1:08 PM
> *To:* Joseph D Williams <joedwil at earthlink.net>
> *Cc:* Brutzman, Donald (Don) (CIV) <brutzman at nps.edu>; X3D Graphics
> public mailing list <x3d-public at web3d.org>
> *Subject:* Re: [x3d-public] X3DParticleEmitter node inherit
> fromX3DChildNode(rather than X3DNode)
>
>
>
> Good comments.
>
>
>    - MetadataSet to have X3DNode nodes
>
> If I understand it, the idea of ending meta to include actual user code
> for the scenegraph is exactly the sort of extension wanting to be
> “worthwhile to deviate a bit and be more permissive than the spec” that
> dooms the long-term validation operation. Maybe good for something with
> simple structure that looks convenient and logical and seemingly convenient
> to implement at first thought and elementary usage, then ends up making
> something definitely not to be best practice. Please delineate the
> “worthwhile” parts that make a case.
>
>
>
> I only know that this construction shows up in most of x-ite examples, and
> is how the Titania editor saves a scene, simple or complex. I can only
> deduce that this decision was deliberate but cannot speak to the specific
> motivation by the author. Speculating, the feature seems to be valuable for
> authoring. It should be possible to convert to standard x3d automatically
> by moving the DEF node from the MetadataSet to the first USE node, perhaps
> by xslt.
>
>
>
> Not quite sure how validation would be affected.
>
>
>
> I agree that Metadata nodes should be limited to actual metadata but a
> library node seems sensible.
>
>
>
> Here is a list of other, well established scene graph systems which do
> have a concept of a non-renderable library which is separate and can then
> be referenced as needed:
>
>
>
> - svg
>
> - glTF
>
> - a-frame
>
> - collada (I believe)
>
>
>
> it is a natural concept and perhaps allows for cleaner user code
> organization. Having two alternative ways to define a DEF node (in a
> library, and as a first scene graph node) does seem to invite friction, and
> would need to be carefully considered.
>
>
>
> Andreas
>
>
>
>
>
> *From: *Andreas Plesch <andreasplesch at gmail.com>
> *Sent: *Tuesday, March 8, 2022 11:39 AM
> *To: *Brutzman, Donald (Don) (CIV) <brutzman at nps.edu>
> *Cc: *X3D Graphics public mailing list <x3d-public at web3d.org>
> *Subject: *Re: [x3d-public] X3DParticleEmitter node inherit
> fromX3DChildNode(rather than X3DNode)
>
>
>
> Yes, I am pretty sure Holger is aware. I only brought it up because
> Titania/x-ite typically stays very close to the spec. But this is a
> capability where Titania/x-ite found it worthwhile to deviate a bit and be
> more permissive than the spec. This decision may point to the value of
> having a way to DEF any X3DNode (not just child nodes) outside of the scene
> graph, outweighing strict compliance.
>
>
>
> All the best, Andreas
>
>
>
> On Tue, Mar 8, 2022 at 2:22 PM Brutzman, Donald (Don) (CIV) <
> brutzman at nps.edu> wrote:
>
> MetadataSet is only allowed to contain other Metadata* nodes or comments.
> Other content will fail validation (and will not load or import in the
> X3DJSAIL Java and X3DPSAIL Python libraries).
>
>
>
> The right way to cache non-rendered content for DEF/USE libraries is to
> put them as children nodes within a Switch node with whichChoice=’-1’.
>
>
>
> 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:* x3d-public <x3d-public-bounces at web3d.org> *On Behalf Of *Andreas
> Plesch
> *Sent:* Tuesday, March 8, 2022 10:11 AM
> *To:* X3D Graphics public mailing list <x3d-public at web3d.org>
> *Subject:* Re: [x3d-public] X3DParticleEmitter node inherit from
> X3DChildNode(rather than X3DNode)
>
>
>
> Of note is that Titania and x-ite allow MetadataSet to have X3DNode nodes,
> eg. any node, in the value field, not just X3DMetadataObject nodes.
>
>
>
> This allows MetadataSet to be used as a NodesLibrary for DEF/USE purposes.
> In fact, this kind of redirection is the default setup for scenes created
> in Titania.
>
>
>
> SVG also has a NodesLibrary equivalent, the <defs> element:
>
>
>
> https://developer.mozilla.org/en-US/docs/Web/SVG/Element/defs
> <https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FSVG%2FElement%2Fdefs&data=04%7C01%7Cbrutzman%40nps.edu%7C95cb4840eb58436e0d9508da02da2e52%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C637825433437663668%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=5JaI6%2BSLM%2F8KrjdebrqukV9UIaHU9Sz5lfBRdiHTEkc%3D&reserved=0>
>
>
>
> -Andreas
>
>
>
> Date: Mon, 7 Mar 2022 21:29:41 +0100
> From: Michalis Kamburelis <michalis.kambi at gmail.com>
> To: Joseph D Williams <joedwil at earthlink.net>
> Cc: GPU Group <gpugroup at gmail.com>,  "X3D Public Mailing List
>         (x3d-public at web3d.org)" <x3d-public at web3d.org>
> Subject: Re: [x3d-public] X3DParticleEmitter node inherit from
>         X3DChildNode(rather than X3DNode)
> Message-ID:
>         <
> CAKzBGZNToR-7CmaUzRxBE3xx9J6j2mPgmvKAjQKpGQxjdY_0hA at mail.gmail.com>
> Content-Type: text/plain; charset="UTF-8"
>
> Perhaps I should have written
>
> """
> The nodes within NodesLibrary don't make any effect, they are not
> traversed. They are only to be reUSEd (referenced) by other parts of
> the graph."
> """
>
> This makes the wording consistent with how e.g. Switch is described.
> Sure you have all the nodes in memory, you just don't traverse to
> inactive parts of Switch, LOD, NodesLibrary etc.
>
> Regards,
> Michalis
>
>
>
>
> --
>
> Andreas Plesch
> Waltham, MA 02453
>
>
>
>
>
>
> --
>
> Andreas Plesch
> Waltham, MA 02453
>


-- 
Andreas Plesch
Waltham, MA 02453
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20220310/a2290d22/attachment-0001.html>


More information about the x3d-public mailing list