[x3d-public] Ran across an interesting example.

Roy Walmsley roy.walmsley at ntlworld.com
Fri May 19 03:24:08 PDT 2017



This is an interesting example, because technically it is not legal X3D  !!


That said, having saved it as a file, and tried it on the X3D Validator, it passed validation !!


Your analysis is correct. Reviewing the standard explains why. Look at ISO/IEC 19775-1 clause 13.3.6 IndexedFaceSet (http://www.web3d.org/documents/specifications/19775-1/V3.3/Part01/components/geometry3D.html#IndexedFaceSet).


We’ll start with the eighth paragraph, which includes the words:


“If the normal field is not NULL, it shall contain a node derived from X3DNormalNode whose normals are applied to the vertices or faces of the IndexedFaceSet in a manner exactly equivalent to that described above for applying colours to vertices/faces (where normalPerVertex corresponds to colorPerVertex and normalIndex corresponds to colorIndex).”


Now let’s look at what should happen for colorIndex when colorPerVertex is false. This is specified at list item d.1. two paragraphs earlier. It reads:


“If the colorIndex field is not empty, one colour is used for each face of the IndexedFaceSet. There shall be at least as many indices in the colorIndex field as there are faces in the IndexedFaceSet. If the greatest index in the colorIndex field is N, there shall be N+1 colours in the X3DColorNode. The colorIndex field shall not contain any negative entries.”


Notice the last sentence, where it say there shall not be any negative values.


So, applying these principles to the normals, we can see that there should be no negative values.


Perhaps the Schematron could be improved by adding a rule to check for this scenario. And thinking about it, it would probably be possible to do it in JSON, although it would be complicated.


All the best,




From: x3d-public [mailto:x3d-public-bounces at web3d.org] On Behalf Of John Carlson
Sent: 19 May 2017 10:57
To: X3D Graphics public mailing list <x3d-public at web3d.org>; x3dom-users at lists.sourceforge.net
Subject: [x3d-public] Ran across an interesting example.


Below X3D XML NOT viewable  in X3DOM, (Octaga??), Instant Player (console goes into infinite loop),  H3D complains about: (Unnamed Normal.vector.  Field has size 6).  I think it may be because normalIndex has -1’s when normalPerVertex=false???  If I take out the -1’s, it’s viewable in X3DOM, Octaga, InstantPlayer, and H3D.  The content still needs work, of course (It’s supposed to be a cube!).


X3DOM’s console looks like:

x3dom-full.js:4743 Uncaught TypeError: Cannot read property 'x' of undefined

    at x3dom.registerNodeType.defineClass.nodeChanged.nodeChanged (x3dom-full.js:4743)

    at x3dom.NodeNameSpace.setupTree (x3dom-full.js:2869)

    at x3dom-full.js:2869

    at Function.Array.forEach (x3dom-full.js:2)

    at x3dom.NodeNameSpace.setupTree (x3dom-full.js:2869)

    at x3dom-full.js:2869

    at Function.Array.forEach (x3dom-full.js:2)

    at x3dom.NodeNameSpace.setupTree (x3dom-full.js:2869)

    at x3dom-full.js:2869

    at Function.Array.forEach (x3dom-full.js:2)


What does quality assurance report?  I don’t get any significant warnings from X3D-Edit or X3DJSAIL, that I can tell!


Not sure about the standard, but leaving out the -1’s makes sense if normalPerVertex = false, I think.  I’ll let others weigh in about the standard.






<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.3//EN" "http://www.web3d.org/specifications/x3d-3.3.dtd">

<X3D profile='Interchange' version='3.3' xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation='http://www.web3d.org/specifications/x3d-3.3.xsd'>


        <meta name='title' content='template.json'/>

        <meta name='identifier' content='http://coderextreme.net/X3DJSONLD/template.json'/>

        <meta name='description' content='Template for an Indexed Face Set'/>

        <meta name='creator' content='John Carlson'/>

        <meta name='created' content='4 April 2017'/>





                <IndexedFaceSet DEF='IndexedFaceSet' colorIndex='0 0 0 -1 0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1' coordIndex='0 0 1 -1 0 1 1 -1 2 2 3 3 -1 0 3 3 0 -1 0 3 2 1 -1 1 2 2 1 -1 1 2 3 0 -1' creaseAngle='1.57' normalIndex='0 -1 0 -1 1 -1 2 -1 3 -1 4 -1 5 -1' normalPerVertex='false'>

                    <Color color='0 1 0'/>

                    <Coordinate point='0 0 1 0 1 1 1 1 1 1 0 1'/>

                    <Normal vector='1 0 0 -1 0 0 0 1 0 0 0 -1 0 -1 0 0 0 1'/>






-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20170519/4877ade4/attachment-0001.html>

More information about the x3d-public mailing list