3D Features Planned for Version 8
Introduction
This page presents the list of 3D features schedule for JavaFX 8.0. This information was presented at this year JavaOne as part of the 3D Made Easy with JavaFX technical session.
Three umbrella JIRA issues were created to capture most of this work: Movable Camera , 3D Geometry, and 3D Attributes
Proposed Features
Movable cameras and SubScene
- Camera is now a Node
- Camera can be added to a scene graph
- Camera's position and aim (or orientation) is set using standard Node transform properties and methods
- For backward compatibility, fixed camera need not be added to the scene
- Added new properties for near & far clipping plane
- SubScene is a special Node for scene separation
- It can be used to render part of the Scene with different camera
- Possible use cases are:
- Picture in picture
- Overlay or "heads-up" display for UI controls in a scene with a moving camera
Camera Class Hierarchy
- javafx.scene.Node
- javafx.scene.Camera (abstract)
- javafx.scene.ParallelCamera
- javafx.scene.PerspectiveCamera
- javafx.scene.SubScene
- javafx.scene.Camera (abstract)
Code segment
Specifying a Fixed Camera (existing 2.2 API)
// Create a camera and add it to the Scene Camera camera = new PerspectiveCamera(); scene.setCamera(camera);
Specifying a Movable Camera
// Create a camera and add it to the Scene Camera camera = new PerspectiveCamera(); scene.setCamera(camera); // Add camera to scene graph (so it can move) Group cameraGroup = new Group(); cameraGroup.getChildren().add(camera); root.getChildren().add(cameraGroup); // Rotate the camera camera.rotate(45); // Move the cameraGroup (camera moves with it) cameraGroup.setTranslateZ(-75);
3D primitives
- Added two type of 3D shapes, extending from an abstract Shape3D base class:
- User-defined shapes (MeshView)
- Predefined shapes
User-defined shapes
- User defined mesh (geometry) of a shape by specifying a set of points, texture coordinates, and faces (triangles that describe the topology)
- User defined smoothing group to specify group of faces that are part of the same curved surface
- A mesh is sharable among mutiple user-defined shapes
Predefined shapes
- Three commonly used predefined 3D shapes are introduced: Box, Cylinder and Sphere
Shape3D Class Hierarchy
- javafx.scene.Node
- javafx.scene.shape3d.Shape3D (abstract)
- javafx.scene.shape3d.MeshView
- javafx.scene.shape3d.Box
- javafx.scene.shape3d.Cylinder
- javafx.scene.shape3d.Sphere
- javafx.scene.shape3d.Shape3D (abstract)
Mesh Class Hierarchy
- java.lang.Object
- javafx.scene.shape3d.Mesh (abstract)
- javafx.scene.shape3d.TriangleMesh
- javafx.scene.shape3d.Mesh (abstract)
Code Segment
Defining a MeshView
// Create the arrays of positions, texCoords float[] positions = createPositions(); float[] texCoords = createUVs(); // Create faces (indices into the positions, texCoord arrays) int[] faces = createFaces(); // Create a mesh TriangleMesh mesh = new TriangleMesh(); mesh.setPositions(positions); mesh.setTexCoords(texCoords); mesh.setFaces(faces); // Create meshView MeshView mv = new MeshView(mesh);
XXXXXXXXXXXx
Overview
Content Tools
ThemeBuilder