FYI: JUniversal3D started. 3D Java API derived from Java 3D.
since analyzing the core engine of the current stable version 1.5.2 and implementing first adaptions I'm convinced that this API is a very pragmatical and efficient starting point to realize a highly competitive 3D API that will meet future requirements for 3D applications.
Hereby I would like to inform you about my intentions and activities concerning JUniversal3D.
The transition will go through several not downwards compatible development steps und will lead to version 2.0 which will provide long-term compatibility.
The current development is guided by the following mission and objectives:
Derive from the '3D Graphics API for the Java Platform'
a cross system Java and DirectX/OpenGL based
open source 3D scene graph API
to provide up-to-date native 3D capabilities for Java / JavaFX applications which target
professional, scientific, educational, and entertainment needs.
1. Independent access to native 3D APIs and GPUs to benefit directly from system capabilities
2. Structure of core, advanced, and individual features that reduce internal complexity, minimize dependencies, and allow application specific packaging
3. Elimination of deprecated and as obsolete declared features
4. Release from Canvas3D and support of multiple render targets
5. Declaration and implementation of new features
6. Programming based on Java 5.0 language features
7. Open source for commercial and public use
To 1. Independent access to native 3D APIs and GPUs to benefit directly from system capabilities
- JOGL pipeline removed
- Native pipeline DirectX Graphics / Direct3D 9
- Native pipeline OpenGL 2.1 (Linux / GLX, Windows / WGL)
- Native pipeline DirectX Graphics / Direct3D 9, HLSL/Effects
- Native pipeline DirectX Graphics / Direct3D 10, Effects
- Native pipeline OpenGL 2.1 (Mac OS X / AGL)
- Native pipeline OpenGL 3.0 (Linux / GLX, Mac OS X / AGL, Windows / WGL)
- Nvidia Cg
- DirectX Audio
To 2. Structure of core, advanced, and individual features that reduce internal complexity, minimize dependencies, and allow application specific packaging
org.juniversal3d.j3d.* stands for several com.sun.j3d.utils-subpackages. These are already ported to this new namespace, but are still subject of redesign, adaption, renaming, and repackaging.
To 3. Elimination of deprecated and as obsolete declared features
- All deprecated packages, classes, methods, etc. removed
- HiResCoord in Locale removed
- Text3D/Font3D/FontExtrution removed (will be replaced by ShapeExtruder/String3D)
- Pure immediate mode, GraphicsContext3D removed
- Compilation, SharedGoup/BranchGoup.compile() removed
- com.sun.j3d.utils.geometry.compression.* removed
- com.sun.j3d.utils.scenegraph.* removed (if it will be replaced then based on XML)
- com.sun.j3d.utils.universe.* (SimpleUniverse etc.) removed
- OrientedShape3D, Billboard Behavior: to be replaced by a BillboardGroup
To 4. Release from Canvas3D and support of multiple render targets
- Canvas3D as the sole render target is replaced by an engine related base class ViewTarget and a public API related interface ViewSurface. Furthermore, a GUI platform has to provide access to the native window by implementing a subclass of DrawingSurfaceObject.
- ViewTarget/ViewSurface prototypes are realized for:
- JU3D internal: ImageComponent2D used in Background, Raster, Texture2D
- AWT/Swing: java.awt.Canvas (Canvas3D), javax.swing.JPanel (JCanvas3D), java.awt.image.BufferedImage
- Eclipse/SWT: org.eclipse.swt.widgets.Canvas
- Qt Jambi: com.trolltech.qt.gui.QWidget
- All these targets can be added simultaneously to a single View (new: Viewer)
- In consequence the input event handling is adapted: the engine now provides cross GUI platfom event handling based on WakeupOnGUIEvent, whereas for each GUI platform a specific subclass is implemented: WakeupOnAWTEvent, WakeupOnQtJEvent, WakeupOnSWTEvent
- Native 3D rendering to Texture2DNative
- Shadow mapping based on Texture2DNative and the new view rendering concept (see below)
To 5. Declaration and implementation of new features
- Each VirtualUniverse is now driven independently by its own MasterControl thread and its own set of further threads. Therefore sharing of NodeComponents across several VirtualUniverses and exchange of Nodes between them isn't supported anymore. Several VirtualUniverses inside a single application run on a common native 3D pipeline.
- All Node types can be added, inserted, moved, removed, and detached in a live scene. The BranchGroup dependency is obsolete.
- A BackgroundGroup is introduced as the root of the Background geometry.
- BranchGroup will be renamed as PickGroup and will operate only as the root of a pickable subscene.
- The Locale will be replaced by the VirtualSpace group as the top scene graph node and as the sole child type of the VirtualUniverse. It is open if VirtualSpace will keep the picking capabilities.
- View specific rendering will base on the scope feature as it is well known for Light, Fog, etc.. The default universal scope can be limited for each View object to individually selected Group nodes. In addition a scope can be terminated at each Group node below its root. ViewSpecificGroup will be removed.
- The viewing concept will be extended to layered view rendering. The Viewer class will be introduced. View objects are to be added as layers to a Viewer object. Their order determines which View is rendered on top of another View. ViewSurfaces (former Canvas3D, see above) are to be added to the Viewer object instead of to the View object. All layers/Views will be rendered into each added ViewSurface. In addition a viewport parameter will be introduced for Views to determine their drawing region. This allows an arbitrary layout of multiple Views inside a single ViewSurface. This concept combined with the scope feature will in principal not influence how a scene graph is to structure. Nodes (per SharedGroup) and NodeComponents are shareable across several layers respectively Views. It might be good practice to choose different VirtualSpaces for each layer.
- Shader attribute binding of JU3D attributes for programmable shader pipelines. Multipass rendering according to DirextX/Cg/Collada-effects for all native 3D APIs.
To 6. Programming based on Java 5.0 language features
- All collections are now typesafe.
- Visibility of classes, constructors, methods and fields is reduced to the minimum.
- All non API classes which are not subclassed are declared as final.
- Replacement of integer based symbolic constants by enums under consideration of native code access.
To 7. Open source for commercial and public use
- Classes of the derived work inside JUniversal3D are licensed under 'GPL2 + classpath exception' or BSD according to the classes they are derived from. New classes are licensed under 'GPL2 + classpath exception'.
- The use of some GUI related classes requires further open source or commercial licenses (e.g. SWT, Qt) depending on which packages are imported.
This overview doesnâ€™t claim to be the best solution or to be complete, surely thereÂ´s room for improvement.
To those who would like to benefit from the JUniversal3D API in future: please provide your ideas how you can contribute personally or financially to determine and to push the development of this API.
You are very welcome to post your comments here or to send them to the author: juniversal3d at interactivemesh dot com.
All trademarks mentioned here are the property of their respective owners.
August Lammersdorf, InteractiveMesh e.K.
Kolomanstrasse 2a, 85737 Ismaning, Germany / Munich Area
Commercial register: district court Munich HRA 89887