VRML nodes not yet supported:
VRML nodes with some support but not all parameters:
VRML nodes which can read and write all parameters but not displayed in 3D
VRML nodes fully supported (but may have bugs):
bug 1 - non ASCII characters in DEF/PROTO names
feedback from Tobin
* compiler warning that setTextureCoordinates and setTextureCoordinateIndices
- no change in this release, I will update to follow latest java3d spec at a future release.
* File compiled but would not run with error "Exception in thread "main"
java.lang.NoClassDefFoundError: mjbOutput (wrong name : mjbOutput/mjbOutput)
- I'll look into this.
* Keep losing my 3d view when I add new components. I Just tried removing the
background from shape.wrl and then adding a new background in its place, and
the 3D view is then shot.
- I cant reproduce this, can you give me more information on the version of JDK and Java3d that you are using, and exactly what you did.
Export to Java source issue
VRML and Java3D use a similar scene graph (which is a tree structure) so its quite easy to convert between them. However there is an area where they differ, that is the mechanism for reusing nodes in several parts of the tree. In VRML we can name a node with the DEF keyword and then use it at other places in the scenegraph with the USE keyword. In Java3d nodes can be used at several points in the scene by using the Link and SharedGroup nodes however the rules for using these nodes are mode restrictive than the VRML DEF/USE keywords. Where the Link and SharedGroup nodes cannot be used then the nodes have to be cloned, which uses more memory. The easiest way to do this would be to implement this would be to always clone nodes when a USE is found. But this would be wasteful in memory so I am trying to build in the intelligence to use Link and SharedGroup nodes where appropriate, but this will take time to do properly.
Calculation of normals
If the VRML does not contain normals then these are generated in the program. The normal to any face can be easily generated by taking the cross-product of the vectors representing any 2 non-parallel sides of the face. The program does this without any problem. However the Indexed array geometry that I am using in java3d requires a normal per vertex and not a normal per face. So I do this by averaging out all the normals of the faces that meet at the vertex. This works well for curved surfaces such as a sphere. If the shapes require hard edges then the VRML signals this by having a 'crease angle' parameter to specify the angle between the normals for different faces at the same vertex. This is the bit that is complex to implement, it will also going to drastically increase the number of normals and hence the size of arrays to hold them. However there may be an interim solution which would be to say: if crease angle is less than say 0.3 then calculate normals as the program does at present, if crease angle is greater than 0.3 then use the normals generated from the faces without averaging. There are still some complications here because there may be more faces than vertexes so I may have to increase the size of the arrays, but it would be much quicker than fully implementing crease angle.
Support for morph
enhancement - I would like to support the ability to morph between different shapes.
enhancement - Multiple views ony 1 3D view can be selected at a time
Bugs in Java3D itself
Drop down menu does not work over the 3D panel
This is because the 3D window is heavyweight (i.e. uses native component) and so is always above lightweight swing components.
The following might possibly be a fix?
Look at http://developer.java.sun.com/developer/earlyAccess/java3D/java3d-bugs.html Point no. 16 under "Core Bugs (j3d and vecmath)"