|
Nectar3D A 3D Scene Graph Engine in Java Demo Application CubeGUI is a fancy cube-matrix-thing that demonstrates more advanced features of Nectar3D. Downloads In the downloads repository at: downloads.xeolabs.com/nectar3d/snapshots Source Code Source code is publicly available at GitHub - github.com/xeolabs/nectar3d Documentation Read the Nectar3D User Guide |
N ectar3D is a basic 3D graphics toolkit I wrote in 2003 that has many of the usual scene graph engine features, such as fog, flat shading, keyframe animation, modifiable scene graph and pickable scene elements. I'm no longer maintaining this project, however it has been reborn as a JavaScript framework called Guava3D. Example: A Spinning CubeLet's use Nectar3D to make this spinning cube, that prints "Hello, World" when you click on it: SceneRenderer renderer = new AWTSceneRenderer(); renderer.setListener( new SceneListener() { public void handleEvent(SceneRendererEvent e) { if(e.getType() == SceneRendererEvent.MOUSE_PICKED) { PickInfo pickInfo = (PickInfo)e.getData(); Selector message = pickInfo.getSelector(); System.out.println(message.toString()); } } }); Then we'll configure the renderer with view transform parameters and a background colour: SceneRendererParams params = new SceneRendererParams(); params.setFrustum(new Volume3(-200.0, -200.0, -300.0, 200.0, 200.0, -100.0)); params.setWindow(new Window2(0, 0, 800, 800)); params.setVPDist(-500.0); params.setEye(new Point3(0.0, 0.0, 100.0)); params.setLook(new Point3(0.0, 0.0, 0.0)); params.setUp(new vector3(0.0, 1.0, 0.0)); params.setBackgroundColor(new Color(100, 255, 255)); // Light blue renderer.setParams(params); Next, we'll make a scene graph using the handy SceneBuilder: SceneBuilder builder = new SceneBuilder(); builder .setErrorHandler(new ErrorHandler() { public void handleError(String message) { System.out.println("Error building scene: " + message); } }) .openEnvironment() .addLightSource(new Vector3(1.0, 0.0, 0.0), new Color(60,60,0)) .addLightSource(new Vector3(1.0, -1.0, 0.0), new Color(100,100,100)) .openLayer("foreground", true, true, true) // Depthsort, depth-cueing and shading .openTransformGroup() .rotateY(0.0) .rotateX(45.0) .openName(new StringSelector("Hello, World!")) .openBox(30.0, 30.0, 30.0) .openMaterial() .setEdgeColor(new Color(255,255,0)) // Yellow .setFillColor(new Color(255,0,0)) // Red .close() .close() .close() .openInterpolator(TransformGroup.ROTY_VAL) .addKeyFrame(0, 0.0) .addKeyFrame(5000, 360.0) .close() .close() .close() .close(); SceneElement sceneRoot = builder.buildScene(); Finally, we'll hand the scene to the renderer, which will immediately start rendering and animating it: renderer.setScene(sceneRoot); Finito!And there we have it; our cube, spinning happily around it's Y-axis. For something a little more sophisticated, take a look at the CubeGUI example. |

