[x3d-public] CubeMap Textures in X3DJSAIL. Breaking bug! Looks like a problem with handleFieldSynonyms().
John Carlson
yottzumm at gmail.com
Thu Jun 17 00:05:57 PDT 2021
Bad code in X3DJSAIL is producing bad JSON and XML output.
The enclosed code (second block below) has not been updated/reflected in
X3DJSAIL, ComposedCubeMapTexture.java. This causes problems when
emitting JSON from X3DJSAIL. Here is what the code currently looks like
for comparison (first block below), obviously there is an error here.
Please fix this ASAP because I cannot generate good JSON or XML from
X3DJSAIL for my ComposedCubeMapTexture's. The X3dToJson.xslt is not the
problem. The problem is in specifying the containerField for the
texture for each of 6 textures. The intermediate XML shows the problem:
6 textures, all pointed at the back containerField.
It's about time to throw up my hands and get rid of my test cases doing
this, and go back to PlayCanvas.
Or perhaps I should just experiment with PBR. Hmm.
BAD CURRENT CODE
==============================================================================================================================================
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);
}
On 6/11/21 11:34 AM, John Carlson wrote:
GOOD CODE
====================================================================================================================================================================
>
> 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 (hasAncestorX3D() &&
> findAncestorX3D().getVersion().startsWith("3"))
> correctedContainerField = "bottomi";
> else correctedContainerField = "bottomiTexture";
>
> if (getBottomTexture() != null)
> ((X3DConcreteNode)
> getBottomTexture()).setContainerFieldOverride(correctedContainerField);
> else if (getBottomTextureProtoInstance() != null)
> ((X3DConcreteNode)
> getBottomTextureProtoInstance()).setContainerFieldOverride(correctedContainerField);
>
> if (hasAncestorX3D() &&
> findAncestorX3D().getVersion().startsWith("3"))
> correctedContainerField = "front";
> else correctedContainerField = "frontTexture";
>
> if (getFrontTexture() != null)
> ((X3DConcreteNode)
> getFrontTexture()).setContainerFieldOverride(correctedContainerField);
> else if (getFrontTextureProtoInstance() != null)
> ((X3DConcreteNode)
> getFrontTextureProtoInstance()).setContainerFieldOverride(correctedContainerField);
>
> if (hasAncestorX3D() &&
> findAncestorX3D().getVersion().startsWith("3"))
> correctedContainerField = "left";
> else correctedContainerField = "leftTexture";
>
> if (getLeftTexture() != null)
> ((X3DConcreteNode)
> getLeftTexture()).setContainerFieldOverride(correctedContainerField);
> else if (getLeftTextureProtoInstance() != null)
> ((X3DConcreteNode)
> getLeftTextureProtoInstance()).setContainerFieldOverride(correctedContainerField);
>
> if (hasAncestorX3D() &&
> findAncestorX3D().getVersion().startsWith("3"))
> correctedContainerField = "right";
> else correctedContainerField = "rightTexture";
>
> if (getRightTexture() != null)
> ((X3DConcreteNode)
> getRightTexture()).setContainerFieldOverride(correctedContainerField);
> else if (getRightTextureProtoInstance() != null)
> ((X3DConcreteNode)
> getRightTextureProtoInstance()).setContainerFieldOverride(correctedContainerField);
>
> if (hasAncestorX3D() &&
> findAncestorX3D().getVersion().startsWith("3"))
> correctedContainerField = "top";
> else correctedContainerField = "topTexture";
>
> if (getTopTexture() != null)
> ((X3DConcreteNode)
> getTopTexture()).setContainerFieldOverride(correctedContainerField);
> else if (getTopTextureProtoInstance() != null)
> ((X3DConcreteNode)
> getTopTextureProtoInstance()).setContainerFieldOverride(correctedContainerField);
>
>
More information about the x3d-public
mailing list