Mixing 2D and 3D
August Lammersdorf, InteractiveMesh
sdn at interactivemesh.com
Sun Jul 21 06:08:10 PDT 2013
I. JavaFX 3D goals
Whatever the use case will be JavaFX 3D will be measured against the
business needs and certainly against the capabilities of the latest
releases of the native 3D APIs Direct3D (11.1) and OpenGL (4.3). This
might be unfair or not helpful, but it is legitimate because they are
the upper limits.
So, even an object-oriented scene-graph-based 3D implementation should
in principle be able to benefit from almost all native 3D features and
should provide access to them. If the JavaFX architecture enables this
approach then a currently minor implementation state will be rather
accepted.
Potential features are currently determined and limited by JavaFX'
underlying native APIs Direct3D 9 and OpenGL ES 2. Correct?
Are there any perspectives available about future features?
- core, e.g.: primitives (points, lines, line-strip, triangle-strip,
patches, corresponding adjacency types), vertex attributes,
double-precision, shaders (vertex, tessalation, geometry, fragment,
compute), 3D-/cubemap-texture, multitextures, compressed texture,
texture properties, multipass rendering, occlusion queries, stencil
test, offscreen rendering into image, multiple active cameras, stereo?
- APIs, e.g.: user input for scene navigation and model interaction
(keyboard, mouse, touchpad/screen), geometry utilies, skinning, physics
engine interface (kinematics), shadows
Will JavaOne 2013 highlight the JavaFX 3D strategy extensively?
Another source: Exploring JavaFX 3D, Jim Weaver
https://oraclein.activeevents.com/connect/fileDownload/session/4D7869532A53BCAC5A18FB5687C1103C/CON1140_Weaver-exploring-javafx-3d.pdf
II. Mixing 2D and 3D
- "to tease apart the scene graph into Node, Node3D, and NodeBase ...
doesn't work"
- "we keep the integrated scene graph as we have it",
So, all current and future 3D leaf and branch nodes are/will be derived
from Node, which is primarily designed for use in a 2D/2.5D scene graph.
Alea iacta est!
Various Node's properties and methods seem not to be relevant or
applicable for 3D nodes (e.g. Shape3D). Are you going to communicate
which of these several hundreds (see below) should be used preferably,
have a different semantic, should not be used or aren't supported for 3D
nodes?
- "So the idea is that we can have different pipelines optimized for
2D or 3D rendering"
Would be great!
- Scene - Scene2D/SubScene2D - Scene3D/SubScene3D
- "if you put a 2D rectangle in a Scene3D/SubScene3D"
What is the use case for rendering 2D pixel-coordinates-based shapes
(or even controls) within a 3D scene consisting of meshes constructed on
3D coordinates of arbitrary unit?
Couldn't the pipelines be even better optimized if neither 2D nodes are
rendered in SubScene3D nor 3D nodes are rendered in SubScene2D?
August
------
javafx.scene.shape.Shape3D
Properties inherited from class javafx.scene.Node
blendMode, boundsInLocal, boundsInParent, cacheHint, cache, clip,
cursor, depthTest, disabled, disable, effectiveNodeOrientation, effect,
eventDispatcher, focused, focusTraversable, hover, id,
inputMethodRequests, layoutBounds, layoutX, layoutY,
localToParentTransform, localToSceneTransform, managed,
mouseTransparent, nodeOrientation, onContextMenuRequested,
onDragDetected, onDragDone, onDragDropped, onDragEntered, onDragExited,
onDragOver, onInputMethodTextChanged, onKeyPressed, onKeyReleased,
onKeyTyped, onMouseClicked, onMouseDragEntered, onMouseDragExited,
onMouseDragged, onMouseDragOver, onMouseDragReleased, onMouseEntered,
onMouseExited, onMouseMoved, onMousePressed, onMouseReleased, onRotate,
onRotationFinished, onRotationStarted, onScrollFinished, onScroll,
onScrollStarted, onSwipeDown, onSwipeLeft, onSwipeRight, onSwipeUp,
onTouchMoved, onTouchPressed, onTouchReleased, onTouchStationary,
onZoomFinished, onZoom, onZoomStarted, opacity, parent, pickOnBounds,
pressed, rotate, rotationAxis, scaleX, scaleY, scaleZ, scene, style,
translateX, translateY, translateZ, visible
Methods inherited from class javafx.scene.Node
addEventFilter, addEventHandler, autosize, blendModeProperty,
boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain,
cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen,
contains, contains, cursorProperty, depthTestProperty, disabledProperty,
disableProperty, effectiveNodeOrientationProperty, effectProperty,
eventDispatcherProperty, fireEvent, focusedProperty,
focusTraversableProperty, getBaselineOffset, getBlendMode,
getBoundsInLocal, getBoundsInParent, getCacheHint, getClassCssMetaData,
getClip, getContentBias, getCssMetaData, getCursor, getDepthTest,
getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId,
getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY,
getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation,
getOnContextMenuRequested, getOnDragDetected, getOnDragDone,
getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver,
getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased,
getOnKeyTyped, getOnMouseClicked, getOnMouseDragEntered,
getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver,
getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited,
getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate,
getOnRotationFinished, getOnRotationStarted, getOnScroll,
getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft,
getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed,
getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished,
getOnZoomStarted, getOpacity, getParent, getProperties,
getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY,
getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass,
getTransforms, getTranslateX, getTranslateY, getTranslateZ,
getTypeSelector, getUserData, hasProperties, hoverProperty, idProperty,
inputMethodRequestsProperty, intersects, intersects, isCache, isDisable,
isDisabled, isFocused, isFocusTraversable, isHover, isManaged,
isMouseTransparent, isPickOnBounds, isPressed, isResizable, isVisible,
layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent,
localToParent, localToParent, localToParent, localToParent,
localToParentTransformProperty, localToScene, localToScene,
localToScene, localToScene, localToScene, localToSceneTransformProperty,
localToScreen, localToScreen, localToScreen, localToScreen,
localToScreen, lookup, lookupAll, managedProperty, maxHeight, maxWidth,
minHeight, minWidth, mouseTransparentProperty, nodeOrientationProperty,
onContextMenuRequestedProperty, onDragDetectedProperty,
onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty,
onDragExitedProperty, onDragOverProperty,
onInputMethodTextChangedProperty, onKeyPressedProperty,
onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty,
onMouseDragEnteredProperty, onMouseDragExitedProperty,
onMouseDraggedProperty, onMouseDragOverProperty,
onMouseDragReleasedProperty, onMouseEnteredProperty,
onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty,
onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty,
onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty,
onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty,
onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty,
onTouchPressedProperty, onTouchReleasedProperty,
onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty,
onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal,
parentToLocal, parentToLocal, parentToLocal, parentToLocal,
pickOnBoundsProperty, prefHeight, prefWidth, pressedProperty,
pseudoClassStateChanged, relocate, removeEventFilter,
removeEventHandler, requestFocus, resize, resizeRelocate,
rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty,
scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal,
sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal,
setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest,
setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler,
setFocused, setFocusTraversable, setHover, setId,
setInputMethodRequests, setLayoutX, setLayoutY, setManaged,
setMouseTransparent, setNodeOrientation, setOnContextMenuRequested,
setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered,
setOnDragExited, setOnDragOver, setOnInputMethodTextChanged,
setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked,
setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged,
setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered,
setOnMouseExited, setOnMouseMoved, setOnMousePressed,
setOnMouseReleased, setOnRotate, setOnRotationFinished,
setOnRotationStarted, setOnScroll, setOnScrollFinished,
setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight,
setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased,
setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted,
setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis,
setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY,
setTranslateZ, setUserData, setVisible, snapshot, snapshot,
startDragAndDrop, startFullDrag, styleProperty, toBack, toFront,
toString, translateXProperty, translateYProperty, translateZProperty,
usesMirroring, visibleProperty
More information about the openjfx-dev
mailing list