Contenu connexe Similaire à Taking a Leap Forward With JavaFX (20) Plus de Simon Ritter (20) Taking a Leap Forward With JavaFX2. Taking A Leap Forward With
JavaFX
Simon Ritter, Oracle Corporation
Gerrit Grunwald, Canoo Engineering AG
Johan Vos, Lodgon
José Pereda, Universidad de Valladolid
3. Copyright © 2012, Oracle and/or its affiliates. All rights reserved.3
The following is intended to outline our general product
direction. It is intended for information purposes only, and
may not be incorporated into any contract. It is not a
commitment to deliver any material, code, or functionality,
and should not be relied upon in making purchasing
decisions. The development, release, and timing of any
features or functionality described for Oracle’s products
remains at the sole discretion of Oracle.
4. Copyright © 2012, Oracle and/or its affiliates. All rights reserved.4
Program Agenda
The Man Machine Interface
Leap Motion Controller
JavaFX Basics and 3D
Leap Motion Java API
Demos
5. Copyright © 2012, Oracle and/or its affiliates. All rights reserved.5
The Man Machine Interface
6. Copyright © 2012, Oracle and/or its affiliates. All rights reserved.6
How It All Started
7. Copyright © 2012, Oracle and/or its affiliates. All rights reserved.7
Progress was made…
8. Copyright © 2012, Oracle and/or its affiliates. All rights reserved.8
Multi-touch has become popular
9. Copyright © 2012, Oracle and/or its affiliates. All rights reserved.9
Gaming Has Driven Several Interfaces
10. Copyright © 2012, Oracle and/or its affiliates. All rights reserved.10
Now It’s About Gestures
11. Copyright © 2012, Oracle and/or its affiliates. All rights reserved.11
The Leap Motion Controller
12. Copyright © 2012, Oracle and/or its affiliates. All rights reserved.12
The Basics
Small device (80 x 30 x 12mm)
USB connection
– No external power required
Multiple OS support
– Windows
– Mac OSX
– Linux
Low cost: $80
13. Copyright © 2012, Oracle and/or its affiliates. All rights reserved.13
The Technology
Array of infra-red sensors
– Can be susceptible to bright light
Proprietary motion detection algorithm
– Tracks to 0.01mm resolution
– The secret sauce
1-2% CPU load
No GPU requirement
14. Copyright © 2012, Oracle and/or its affiliates. All rights reserved.14
The Details
The Leap Motion sensor detects hands, fingers and tools
Data captured as frames continuously
Listener handles events from frames
Controller is the connection between device and application
Gesture recognition must be enabled through the controller
15. Copyright © 2012, Oracle and/or its affiliates. All rights reserved.15
Leap Motion Java API
Co-ordinate System
Right hand Cartesian co-ordinate system
16. Copyright © 2012, Oracle and/or its affiliates. All rights reserved.16
60cm range
150 view angle (left/right)
120 view angle (front/back)
Field Of View
17. Copyright © 2012, Oracle and/or its affiliates. All rights reserved.17
Gestures
Predefined gestures
– Circle
– Swipe
– Key tap (downward movement: y-axis)
– Screen tap (forward movement: z-axis)
Turn, twist, tilt, make a fist
– Use motion factors from frame
Translation, rotation axis, rotation angle, scale factor
18. Copyright © 2012, Oracle and/or its affiliates. All rights reserved.18
JavaFX Basics and 3D
19. Copyright © 2012, Oracle and/or its affiliates. All rights reserved.19
JavaFX: The New Way To Build Java UIs
20. Copyright © 2012, Oracle and/or its affiliates. All rights reserved.20
Scene Graph
Directed Acyclic Graph
Parents and children
Representation of the GUI components
21. Copyright © 2012, Oracle and/or its affiliates. All rights reserved.21
Binding
Creates a dependency between a property and a
changeable value
High level API
– Easy to use
– Covers most common situations
Low level API
– Allows for more complex interactions
– Optimised for fast execution and small footprint
22. Copyright © 2012, Oracle and/or its affiliates. All rights reserved.22
Properties
Basis for high level binding API
Concrete types for all primitives, String and Object
– DoubleProperty, StringProperty, etc
Simple API
– bind / unbind
– bindBidirectional / unbindBidirectional
– isBound
23. Copyright © 2012, Oracle and/or its affiliates. All rights reserved.23
Timeline Based Animations
Timeline
– Modifies values of variables specified in KeyFrames
KeyFrame: specifies that a variable should have
– A particular value at a particular time
KeyValue: Value to be interpolated for an interval
24. Copyright © 2012, Oracle and/or its affiliates. All rights reserved.24
Animated Transitions
Pre-defined, single-purpose animations
– Fade, Path, Pause, Rotate, Scale, Translate
– Can specify to, from and by values
Container transitions
– Parallel, sequential
– Can be nested arbitarily
Transitions and Timelines share ancestary
– A Timeline can be added to a Parallel / Sequential transition
25. Copyright © 2012, Oracle and/or its affiliates. All rights reserved.25
JavaFX And The Third Dimension
Basic collection of 3D shapes
– Box
– Cylinder
– Sphere
– MeshView (everything else)
javafx.scene.shape
Shapes
26. Copyright © 2012, Oracle and/or its affiliates. All rights reserved.26
JavaFX And The Third Dimension
PhongMaterial
– Way to cover a 3D object in a colour or image
– Uses interpolation to smooth polygon effects
Surfaces
27. Copyright © 2012, Oracle and/or its affiliates. All rights reserved.27
JavaFX And The Third Dimension
How to illuminate the scene
javafx.scene.effect.LightBase
AmbientLight
– A light source that seems to come from all directions
PointLight
– An attenuated light source that has a fixed point in space and radiates light
equally away from itself in all directions
Lighting
28. Copyright © 2012, Oracle and/or its affiliates. All rights reserved.28
JavaFX And The Third Dimension
Where the scene is viewed from
PerspectiveCamera
– Field of view is configurable (default is 30°)
ParallelCamera
– Renders a scene without perspective correction
Cameras
29. Copyright © 2012, Oracle and/or its affiliates. All rights reserved.29
Leap Motion Java API
30. Copyright © 2012, Oracle and/or its affiliates. All rights reserved.30
Interaction Principles
Frame
Application Code
Listener
GUI Node
GUI Node
GUI Node
Controller
Leap
Motion
31. Copyright © 2012, Oracle and/or its affiliates. All rights reserved.31
Basic Approach
Create Controller
Register Listener
– Subclass to implement specific functionality
onFrame callback method in Listener called by Controller
Or you can use polling
Frame contains all data
– Hand position, orientation
– Fingers
– Pointer position, orientation
32. Copyright © 2012, Oracle and/or its affiliates. All rights reserved.32
Frame By Frame
Set of hand and finger tracking data detected at a point in time
Hand provides:
– Direction of palm
– List of visible Fingers
Finger (which is a subclass of Pointable) provides:
– Direction
– Tip position and velocity
– Length, width
– Time visible
33. Copyright © 2012, Oracle and/or its affiliates. All rights reserved.33
Handling Gestures
Enable the gestures you want to use
Recognised gesture data is added to the Frame
GestureList gl = frame.gestures();
for (int i = 0; i < gl.count(); i++) {
Gesture g = gl.get(i);
if (g.type == TYPE_SWIPE)
SwipeGesture sw = new SwipeGesture(g);
...
34. Copyright © 2012, Oracle and/or its affiliates. All rights reserved.34
Conclusions and More
Information
35. Copyright © 2012, Oracle and/or its affiliates. All rights reserved.35
Conclusions
Leap Motion adds a great new way to interact with applications
Java support makes integration with existing applications simple
– Clean, straightforward API
– Simple gesture recognition
Use your imagination!
36. Copyright © 2012, Oracle and/or its affiliates. All rights reserved.36
Further Information
www.leapmotion.com
www.oracle.com/javafx
jperedadnr.blogspot.co.uk
blogs.oracle.com/speakjava
38. Copyright © 2012, Oracle and/or its affiliates. All rights reserved.38
Graphic Section Divider
Notes de l'éditeur AWT and Swing use a container/component hierarchy for organising the GUI. Layout managers are fundamental to this, but can make development difficult and involved. JavaFX uses a scenegraph which will be familiar to developers who have programmed in 3D. The concept is that all components in the GUI are represented by nodes. Each node can have one parent and groupings can be made by attaching multiple nodes (which may themselves be parents) to a parent. Applying effects to groups of nodes is simply a matter of applying the effect to the parent node. Z ordering can also be altered within a group and for a group as a whole. Binding is one of the most powerful features of JavaFX. It allows developers to specify the relationship between properties and values so that when the value changes the property is automatically modified byt the JavaFX runtime system. This is analogous to the listener pattern used extensively in AWT/Swing but requires less coding by the developer.The API is separated into a high level version that covers most of the common tasks, but does not provide total flexibility. For tasks that require complete flexibility the low-level API can be used. This, however, requires more coding. Properties are the basis for high-level binding. There are property types for all Java primitives as well as String and Object. The API for this is simple, allowing you to bind or unbind the property. Bi-directional binding is also supported. Animations are changes in properties that happen over time (fading by modifying opacity, moving the position of a node, etc).JavaFX uses a Timeline to implement this; each one consisting of a series of KeyFrames. These are points in time where a property will have a specified value (it can also be used to start an action through a method call). The KeyValue has one or more KeyValues that represent the property-value tuple. When a Timeline is started the JavaFX runtime will alter the value of the property automatically. By binding to the changing property the GUI can be animated. To simplify comman tasks JavaFX includes a number of animated transitions to automate things like fading, rotation, scaling and so on. The start end and intermediate points can all be specificed. These can then be grouped together to provide either sequential or parallel transitions. For non-standard animations arbitary Timelines can also be included in the parallel or sequential transitions.