[x3d-public] CubeMap Textures in X3DJSAIL. Breaking bug! back/backTexture used 6 times instead of once. Please fix very soon, so I can use X3DJSAIL
John Carlson
yottzumm at gmail.com
Tue Jun 1 21:56:46 PDT 2021
Here are the files that are affected:
~/X3DJSONLD/src/main/data$ grep ComposedCubeMapTexture *x3d|grep -v new
ball.x3d: <ComposedCubeMapTexture DEF="texture">
ball.x3d: </ComposedCubeMapTexture>
ball.x3d: <ComposedCubeMapTexture
USE="texture"></ComposedCubeMapTexture>
ball.x3d: <ComposedCubeMapTexture
USE="texture"></ComposedCubeMapTexture>
ball.x3d: <ComposedCubeMapTexture
USE="texture"></ComposedCubeMapTexture>
ball.x3d: <ComposedCubeMapTexture
USE="texture"></ComposedCubeMapTexture>
bubbles.x3d: <ComposedCubeMapTexture
containerField='texture'>
bubbles.x3d: </ComposedCubeMapTexture>
bub.x3d: <ComposedCubeMapTexture DEF="texture">
bub.x3d: </ComposedCubeMapTexture>
bub.x3d: <ComposedCubeMapTexture USE="texture"/>
flowerproto.x3d: <ComposedCubeMapTexture DEF="texture">
flowerproto.x3d: </ComposedCubeMapTexture>
flowerproto.x3d: <ComposedCubeMapTexture USE="texture"/>
flowers4.x3d: <ComposedCubeMapTexture>
flowers4.x3d: </ComposedCubeMapTexture>
flowers7.x3d: <ComposedCubeMapTexture DEF="texture">
flowers7.x3d: </ComposedCubeMapTexture>
flowers7.x3d: <ComposedCubeMapTexture USE="texture"/>
flowers7.x3d: <ComposedCubeMapTexture USE="texture"/>
flowers.x3d: <ComposedCubeMapTexture
DEF="texture">
flowers.x3d: </ComposedCubeMapTexture>
flowers.x3d: <ComposedCubeMapTexture USE="texture"/>
flowers.x3d: <ComposedCubeMapTexture USE="texture"/>
geo.x3d: <ComposedCubeMapTexture DEF='texture'>
geo.x3d: </ComposedCubeMapTexture>
geo.x3d: <ComposedCubeMapTexture
USE="texture"></ComposedCubeMapTexture>
geo.x3d: <ComposedCubeMapTexture
USE="texture"></ComposedCubeMapTexture>
mirror2.x3d: <ComposedCubeMapTexture>
mirror2.x3d: </ComposedCubeMapTexture>
mirror.x3d: <ComposedCubeMapTexture>
mirror.x3d: </ComposedCubeMapTexture>
On 6/1/21 11:41 PM, John Carlson wrote:
>
> So let's look at some of the products of X3DJSAIL and X3DJSONLD
> (either through Java or Node.js). I backed out my change in the XML
> back to 3.3
>
>
> ~/X3DJSONLD/src/main/data$ egrep ImageTexture ball.x3d ball.x3d.new
> ball.newPrettyPrint.intermediate.x3d ball.new.x3d
>
> [ this is the original XML file. See the 6 different containerFields ]
>
> ball.x3d: <ImageTexture
> url='"../resources/images/all_probes/stpeters_cross/stpeters_back.png"
> "https://coderextreme.net/X3DJSONLD/images/all_probes/stpeters_cross/stpeters_back.png"'
> containerField="backTexture"/>
> ball.x3d: <ImageTexture
> url='"../resources/images/all_probes/stpeters_cross/stpeters_bottom.png"
> "https://coderextreme.net/X3DJSONLD/images/all_probes/stpeters_cross/stpeters_bottom.png"'
> containerField="bottomTexture"/>
> ball.x3d: <ImageTexture
> url='"../resources/images/all_probes/stpeters_cross/stpeters_front.png"
> "https://coderextreme.net/X3DJSONLD/images/all_probes/stpeters_cross/stpeters_front.png"'
> containerField="frontTexture"/>
> ball.x3d: <ImageTexture
> url='"../resources/images/all_probes/stpeters_cross/stpeters_left.png"
> "https://coderextreme.net/X3DJSONLD/images/all_probes/stpeters_cross/stpeters_left.png"'
> containerField="leftTexture"/>
> ball.x3d: <ImageTexture
> url='"../resources/images/all_probes/stpeters_cross/stpeters_right.png"
> "https://coderextreme.net/X3DJSONLD/images/all_probes/stpeters_cross/stpeters_right.png"'
> containerField="rightTexture"/>
> ball.x3d: <ImageTexture
> url='"../resources/images/all_probes/stpeters_cross/stpeters_top.png"
> "https://coderextreme.net/X3DJSONLD/images/all_probes/stpeters_cross/stpeters_top.png"'
> containerField="topTexture"/>
>
>
>
> [ this is the XML after the JSON goes through X3DJSONLD.js. Notice
> that containerField names are preserved. ]
>
>
> ball.x3d.new:<ComposedCubeMapTexture containerField="texture"
> DEF="texture"><ImageTexture containerField="backTexture"
> url=""../resources/images/all_probes/stpeters_cross/stpeters_back.png"
> "https://coderextreme.net/X3DJSONLD/images/all_probes/stpeters_cross/stpeters_back.png""></ImageTexture>
> ball.x3d.new:<ImageTexture containerField="bottomTexture"
> url=""../resources/images/all_probes/stpeters_cross/stpeters_bottom.png"
> "https://coderextreme.net/X3DJSONLD/images/all_probes/stpeters_cross/stpeters_bottom.png""></ImageTexture>
> ball.x3d.new:<ImageTexture containerField="frontTexture"
> url=""../resources/images/all_probes/stpeters_cross/stpeters_front.png"
> "https://coderextreme.net/X3DJSONLD/images/all_probes/stpeters_cross/stpeters_front.png""></ImageTexture>
> ball.x3d.new:<ImageTexture containerField="leftTexture"
> url=""../resources/images/all_probes/stpeters_cross/stpeters_left.png"
> "https://coderextreme.net/X3DJSONLD/images/all_probes/stpeters_cross/stpeters_left.png""></ImageTexture>
> ball.x3d.new:<ImageTexture containerField="rightTexture"
> url=""../resources/images/all_probes/stpeters_cross/stpeters_right.png"
> "https://coderextreme.net/X3DJSONLD/images/all_probes/stpeters_cross/stpeters_right.png""></ImageTexture>
> ball.x3d.new:<ImageTexture containerField="topTexture"
> url=""../resources/images/all_probes/stpeters_cross/stpeters_top.png"
> "https://coderextreme.net/X3DJSONLD/images/all_probes/stpeters_cross/stpeters_top.png""></ImageTexture>
>
>
> [ this is the intermediate output from X3DJSAIL Note a single
> containerField. ]
>
> ball.newPrettyPrint.intermediate.x3d: <ImageTexture
> containerField='back'
> url='"../resources/images/all_probes/stpeters_cross/stpeters_back.png"
> "https://coderextreme.net/X3DJSONLD/images/all_probes/stpeters_cross/stpeters_back.png"'/>
> ball.newPrettyPrint.intermediate.x3d: <ImageTexture
> containerField='back'
> url='"../resources/images/all_probes/stpeters_cross/stpeters_bottom.png"
> "https://coderextreme.net/X3DJSONLD/images/all_probes/stpeters_cross/stpeters_bottom.png"'/>
> ball.newPrettyPrint.intermediate.x3d: <ImageTexture
> containerField='back'
> url='"../resources/images/all_probes/stpeters_cross/stpeters_front.png"
> "https://coderextreme.net/X3DJSONLD/images/all_probes/stpeters_cross/stpeters_front.png"'/>
> ball.newPrettyPrint.intermediate.x3d: <ImageTexture
> containerField='back'
> url='"../resources/images/all_probes/stpeters_cross/stpeters_left.png"
> "https://coderextreme.net/X3DJSONLD/images/all_probes/stpeters_cross/stpeters_left.png"'/>
> ball.newPrettyPrint.intermediate.x3d: <ImageTexture
> containerField='back'
> url='"../resources/images/all_probes/stpeters_cross/stpeters_right.png"
> "https://coderextreme.net/X3DJSONLD/images/all_probes/stpeters_cross/stpeters_right.png"'/>
> ball.newPrettyPrint.intermediate.x3d: <ImageTexture
> containerField='back'
> url='"../resources/images/all_probes/stpeters_cross/stpeters_top.png"
> "https://coderextreme.net/X3DJSONLD/images/all_probes/stpeters_cross/stpeters_top.png"'/>
>
>
> [ This is the output from Node.js/X3DJSAIL, I believe. Note that the
> containerField's echo the above intermediate form. ]
>
> ball.new.x3d: <ImageTexture containerField='back'
> url='"../resources/images/all_probes/stpeters_cross/stpeters_back.png"
> "https://coderextreme.net/X3DJSONLD/images/all_probes/stpeters_cross/stpeters_back.png"'/>
> ball.new.x3d: <ImageTexture containerField='back'
> url='"../resources/images/all_probes/stpeters_cross/stpeters_bottom.png"
> "https://coderextreme.net/X3DJSONLD/images/all_probes/stpeters_cross/stpeters_bottom.png"'/>
> ball.new.x3d: <ImageTexture containerField='back'
> url='"../resources/images/all_probes/stpeters_cross/stpeters_front.png"
> "https://coderextreme.net/X3DJSONLD/images/all_probes/stpeters_cross/stpeters_front.png"'/>
> ball.new.x3d: <ImageTexture containerField='back'
> url='"../resources/images/all_probes/stpeters_cross/stpeters_left.png"
> "https://coderextreme.net/X3DJSONLD/images/all_probes/stpeters_cross/stpeters_left.png"'/>
> ball.new.x3d: <ImageTexture containerField='back'
> url='"../resources/images/all_probes/stpeters_cross/stpeters_right.png"
> "https://coderextreme.net/X3DJSONLD/images/all_probes/stpeters_cross/stpeters_right.png"'/>
> ball.new.x3d: <ImageTexture containerField='back'
> url='"../resources/images/all_probes/stpeters_cross/stpeters_top.png"
> "https://coderextreme.net/X3DJSONLD/images/all_probes/stpeters_cross/stpeters_top.png"'/>
>
>
> Note that if I call "setFront()" or "setFrontTexture()" I expect the
> containerField to be set. So I wrote Java like this:
>
>
> .addChild(new Transform()
> .addChild(new Shape()
> .setGeometry(new Sphere())
> .setAppearance(new Appearance()
> .setMaterial(new Material().setDiffuseColor(new float[]
> {0.7f,0.7f,0.7f}).setSpecularColor(new float[] {0.5f,0.5f,0.5f}))
> .setTexture(new ComposedCubeMapTexture().setDEF("texture")
> .setBackTexture(new ImageTexture().setUrl(new
> MFString6().getArray()))
> .setBottomTexture(new ImageTexture().setUrl(new
> MFString7().getArray()))
> .setFrontTexture(new ImageTexture().setUrl(new
> MFString8().getArray()))
> .setLeftTexture(new ImageTexture().setUrl(new
> MFString9().getArray()))
> .setRightTexture(new ImageTexture().setUrl(new
> MFString10().getArray()))
> .setTopTexture(new ImageTexture().setUrl(new
> MFString11().getArray())))
>
>
> And Node.js like this:
>
>
> .addChild((new autoclass.Shape())
> .setGeometry((new autoclass.Sphere()))
> .setAppearance((new autoclass.Appearance())
> .setMaterial((new
> autoclass.Material()).setDiffuseColor(java.newArray("float",
> [java.newFloat(0.7), java.newFloat(0.7),
> java.newFloat(0.7)])).setSpecularColor(java.newArray("float",
> [java.newFloat(0.5), java.newFloat(0.5), java.newFloat(0.5)])))
> .setTexture((new
> autoclass.ComposedCubeMapTexture()).setDEF("texture")
> .setBackTexture((new
> autoclass.ImageTexture()).setUrl(java.newArray("java.lang.String",
> ["../resources/images/all_probes/stpeters_cross/stpeters_back.png","https://coderextreme.net/X3DJSONLD/images/all_probes/stpeters_cross/stpeters_back.png"])))
> .setBottomTexture((new
> autoclass.ImageTexture()).setUrl(java.newArray("java.lang.String",
> ["../resources/images/all_probes/stpeters_cross/stpeters_bottom.png","https://coderextreme.net/X3DJSONLD/images/all_probes/stpeters_cross/stpeters_bottom.png"])))
> .setFrontTexture((new
> autoclass.ImageTexture()).setUrl(java.newArray("java.lang.String",
> ["../resources/images/all_probes/stpeters_cross/stpeters_front.png","https://coderextreme.net/X3DJSONLD/images/all_probes/stpeters_cross/stpeters_front.png"])))
> .setLeftTexture((new
> autoclass.ImageTexture()).setUrl(java.newArray("java.lang.String",
> ["../resources/images/all_probes/stpeters_cross/stpeters_left.png","https://coderextreme.net/X3DJSONLD/images/all_probes/stpeters_cross/stpeters_left.png"])))
> .setRightTexture((new
> autoclass.ImageTexture()).setUrl(java.newArray("java.lang.String",
> ["../resources/images/all_probes/stpeters_cross/stpeters_right.png","https://coderextreme.net/X3DJSONLD/images/all_probes/stpeters_cross/stpeters_right.png"])))
> .setTopTexture((new
> autoclass.ImageTexture()).setUrl(java.newArray("java.lang.String",
> ["../resources/images/all_probes/stpeters_cross/stpeters_top.png","https://coderextreme.net/X3DJSONLD/images/all_probes/stpeters_cross/stpeters_top.png"]))))
>
>
> Here's what's normally done to get a backTexture. These look fairly
> good, I haven't found a bug in these methods for the containerFields.
>
> public ComposedCubeMapTexture setBackTexture(
> org.web3d.x3d.sai.Texturing.X3DTexture2DNode newValue)
> {
> // set-newValue-validity-checks #0
> backTexture = newValue;
> if (newValue != null)
> {
> ((X3DConcreteElement)
> backTexture).setParent(this); // parentTest15
> ((X3DConcreteNode)backTexture).setContainerFieldOverride("backTexture");
> }
> if (backTextureProtoInstance != null)
> {
> backTextureProtoInstance.setParent(null); // housekeeping, clear prior
> object
> backTextureProtoInstance = null;
> }
> return this;
> }
>
>
> But I just found this. Looks not very good at all, and potentially
> why we get 6 back containerFields or 6 backTexture containerFields:
>
> ComposedCubeMapTexture.java (from X3DJSAIL source, please code review
> this, thanks):
>
> private void handleFieldSynonyms()
> {
> String correctedContainerField;
> if (hasAncestorX3D() &&
> findAncestorX3D().getVersion().startsWith("3"))
> correctedContainerField = "back";
> else correctedContainerField = "backTexture";
>
> if (getBackTexture() != null)
> ((X3DConcreteNode)
> getBackTexture()).setContainerFieldOverride(correctedContainerField);
> else if (getBackTextureProtoInstance() != null)
> ((X3DConcreteNode)
> getBackTextureProtoInstance()).setContainerFieldOverride(correctedContainerField);
>
> if (getBottomTexture() != null)
> ((X3DConcreteNode)
> getBottomTexture()).setContainerFieldOverride(correctedContainerField);
> else if (getBottomTextureProtoInstance() != null)
> ((X3DConcreteNode)
> getBottomTextureProtoInstance()).setContainerFieldOverride(correctedContainerField);
>
> if (getFrontTexture() != null)
> ((X3DConcreteNode)
> getFrontTexture()).setContainerFieldOverride(correctedContainerField);
> else if (getFrontTextureProtoInstance() != null)
> ((X3DConcreteNode)
> getFrontTextureProtoInstance()).setContainerFieldOverride(correctedContainerField);
>
> if (getLeftTexture() != null)
> ((X3DConcreteNode)
> getLeftTexture()).setContainerFieldOverride(correctedContainerField);
> else if (getLeftTextureProtoInstance() != null)
> ((X3DConcreteNode)
> getLeftTextureProtoInstance()).setContainerFieldOverride(correctedContainerField);
>
> if (getRightTexture() != null)
> ((X3DConcreteNode)
> getRightTexture()).setContainerFieldOverride(correctedContainerField);
> else if (getRightTextureProtoInstance() != null)
> ((X3DConcreteNode)
> getRightTextureProtoInstance()).setContainerFieldOverride(correctedContainerField);
>
> if (getTopTexture() != null)
> ((X3DConcreteNode)
> getTopTexture()).setContainerFieldOverride(correctedContainerField);
> else if (getTopTextureProtoInstance() != null)
> ((X3DConcreteNode)
> getTopTextureProtoInstance()).setContainerFieldOverride(correctedContainerField);
> }
>
>
>
> If someone could at least confirm the bug, that would be cool.
>
> John
>
>
>
> On 5/28/21 2:08 PM, John Carlson wrote:
>> I haven’t seen any validation problems when I changed the version of
>> the JSON file to 4.0, JSON parser errors started when I changed the
>> XML to 4.0.
>>
>> Hopefully that is clear. My thinking is kind of muggy right now.
>>
>> John
>>
>>
>>
>> On Fri, May 28, 2021 at 10:56 AM Don Brutzman <brutzman at nps.edu
>> <mailto:brutzman at nps.edu>> wrote:
>>
>> Thanks John. Yes there are a few differences in field names from
>> X3D3 to X3D4, for improved object-model consistency. Summarized at
>>
>> * X3D Scene Authoring Hints: Field name changes planned for
>> improved consistency
>> https://www.web3d.org/x3d/content/examples/X3dSceneAuthoringHints.html#fieldNameChanges
>> <https://www.web3d.org/x3d/content/examples/X3dSceneAuthoringHints.html#fieldNameChanges>
>>
>> We should be able to confirm correctness of X3DUOM 3.3 next week,
>> am thinking that prior-version names/synonyms should be something
>> to include in X3DUOM 4.0 as well.
>>
>>
>> On 5/27/2021 11:12 PM, John Carlson wrote:
>> > Report (still on old version of X3DJSAIL):
>> >
>> > These files are the one's I'm trying to get translations
>> working for:
>> >
>> > /X3DJSONLD/src/main/data$ grep -l ComposedCubeMapTexture *.x3d|
>> grep -v new
>> >
>> > ball.x3d
>> > bubbles.x3d
>> > bub.x3d
>> > flowerproto.x3d
>> > flowers4.x3d
>> > flowers7.x3d
>> > flowers.x3d
>> > geo.x3d
>> > mirror2.x3d
>> > mirror.x3d
>> >
>> > Here are the JSON files that don't parse:
>> >
>> > ~/X3DJSONLD/src/main/data$ for i in *.json; do jsonlint $i 2>
>> /dev/null 1> /dev/null|| echo $i; done
>> > ball.new.json
>> > bubbles.new.json
>> > bub.new.json
>> > flowerproto.new.json
>> > flowers4.new.json
>> > flowers7.new.json
>> > flowers.new.json
>> > geo.new.json
>> > mirror2.new.json
>> > mirror.new.json
>> > SpatialAudioCameraAnimation.json
>> > SplitChannels.json
>> > text.new.json
>> >
>> >
>> > The new.json files are created from my generated Java code. So
>> either my code is wrong, or there's something wrong with X3DJSAIL.
>> >
>> >
>> > My code looks like this:
>> >
>> >
>> > .setTexture(new ComposedCubeMapTexture().setDEF("texture")
>> > .setBackTexture(new ImageTexture().setUrl(new
>> MFString6().getArray()))
>> > .setBottomTexture(new
>> ImageTexture().setUrl(new MFString7().getArray()))
>> > .setFrontTexture(new ImageTexture().setUrl(new
>> MFString8().getArray()))
>> > .setLeftTexture(new ImageTexture().setUrl(new
>> MFString9().getArray()))
>> > .setRightTexture(new ImageTexture().setUrl(new
>> MFString10().getArray()))
>> > .setTopTexture(new ImageTexture().setUrl(new
>> MFString11().getArray())))
>> >
>> >
>> > with setUSE below.
>> >
>> >
>> > John
>> >
>> > On 5/27/21 10:52 PM, John Carlson wrote:
>> >> A somewhat significant change to X3DUOM 3.3 causes generated
>> X3D JSON schema 3.3 to reject files.
>> >>
>> >> That is, there is no longer a bottomTexture, topTexture,
>> frontTexture, etc. for ComposedCubeMapTexture. Instead,
>> "Texture" is left off of these fields.
>> >>
>> >>
>> >> 4.0 has the Texture added.
>> >>
>> >>
>> >> 2 suggestions:
>> >>
>> >> Update your files to X3D4.
>> >>
>> >> OR:
>> >>
>> >> Add these fields to X3DUOM 3.3 or find some way to get the old
>> fields into X3D JSON schema 3.3 during schema generation (help!).
>> >>
>> >> I am not sure what the standard or the browsers do at this point.
>> >>
>> >> I'm upgrading my files to X3D4 and see if they work in various
>> browsers.
>> >>
>> >> Help!
>> >>
>> >> John
>> >>
>> >
>> > _______________________________________________
>> > x3d-public mailing list
>> > x3d-public at web3d.org <mailto:x3d-public at web3d.org>
>> > http://web3d.org/mailman/listinfo/x3d-public_web3d.org
>> <http://web3d.org/mailman/listinfo/x3d-public_web3d.org>
>>
>> all the best, Don
>> --
>> Don Brutzman Naval Postgraduate School, Code USW/Br
>> brutzman at nps.edu <mailto:brutzman at nps.edu>
>> Watkins 270, MOVES Institute, Monterey CA 93943-5000 USA
>> +1.831.656.2149
>> X3D graphics, virtual worlds, navy robotics
>> http://faculty.nps.edu/brutzman <http://faculty.nps.edu/brutzman>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20210601/1cc8adc5/attachment-0001.html>
More information about the x3d-public
mailing list