Package com.google.ar.sceneform
Class Scene
- java.lang.Object
-
- com.google.ar.sceneform.NodeParent
-
- com.google.ar.sceneform.Scene
-
public class Scene extends NodeParent
The Sceneform Scene maintains the scene graph, a hierarchical organization of a scene's content. A scene can have zero or more child nodes and each node can have zero or more child nodes.The Scene also provides hit testing, a way to detect which node is touched by a MotionEvent or Ray.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interface
Scene.OnPeekTouchListener
Interface definition for a callback to be invoked when a touch event is dispatched to a scene.static interface
Scene.OnTouchListener
Interface definition for a callback to be invoked when a touch event is dispatched to a scene.static interface
Scene.OnUpdateListener
Interface definition for a callback to be invoked once per frame immediately before the scene is updated.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addOnPeekTouchListener(Scene.OnPeekTouchListener onPeekTouchListener)
Adds a listener that will be called before theScene.OnTouchListener
is invoked.void
addOnUpdateListener(Scene.OnUpdateListener onUpdateListener)
Adds a listener that will be called once per frame immediately before the Scene is updated.void
destroy()
Camera
getCamera()
Get the camera that is used to render the scene.Renderer
getRenderer()
Returns the renderer used for this scene, or null if the renderer is not setup.SceneView
getView()
Returns the SceneView used to create the scene.HitTestResult
hitTest(android.view.MotionEvent motionEvent, boolean onlySelectableNodes)
Tests to see if a motion event is touching any nodes within the scene, based on a ray hit test whose origin is the screen position of the motion event, and outputs a HitTestResult containing the node closest to the screen.HitTestResult
hitTest(Ray ray, boolean onlySelectableNodes)
Tests to see if a ray is hitting any nodes within the scene and outputs a HitTestResult containing the node closest to the ray origin that intersects with the ray.java.util.ArrayList<HitTestResult>
hitTestAll(android.view.MotionEvent motionEvent)
Tests to see if a motion event is touching any nodes within the scene and returns a list of HitTestResults containing all of the nodes that were hit, sorted by distance.java.util.ArrayList<HitTestResult>
hitTestAll(Ray ray)
Tests to see if a ray is hitting any nodes within the scene and returns a list of HitTestResults containing all of the nodes that were hit, sorted by distance.void
onAddChild(Node child)
void
onRemoveChild(Node child)
Node
overlapTest(Node node)
Tests to see if the given node's collision shape overlaps the collision shape of any other nodes in the scene usingNode.getCollisionShape()
.java.util.ArrayList<Node>
overlapTestAll(Node node)
Tests to see if a node is overlapping any other nodes within the scene usingNode.getCollisionShape()
.void
removeOnPeekTouchListener(Scene.OnPeekTouchListener onPeekTouchListener)
Removes a listener that will be called before theScene.OnTouchListener
is invoked.void
removeOnUpdateListener(Scene.OnUpdateListener onUpdateListener)
Removes a listener that will be called once per frame immediately before the Scene is updated.void
setOnTouchListener(Scene.OnTouchListener onTouchListener)
Register a callback to be invoked when the scene is touched.-
Methods inherited from class com.google.ar.sceneform.NodeParent
addChild, callOnHierarchy, findByName, findInHierarchy, getChildren, removeChild
-
-
-
-
Constructor Detail
-
Scene
public Scene(SceneView view)
Create a scene with the given context.
-
-
Method Detail
-
getView
public SceneView getView()
Returns the SceneView used to create the scene.
-
getCamera
public Camera getCamera()
Get the camera that is used to render the scene. The camera is a type of node.- Returns:
- the camera used to render the scene
-
destroy
public void destroy()
-
setOnTouchListener
public void setOnTouchListener(@Nullable Scene.OnTouchListener onTouchListener)
Register a callback to be invoked when the scene is touched. The callback will be invoked after the touch event is dispatched to the nodes in the scene if no node consumed the event. This is called even if the touch is not over a node, in which caseHitTestResult.getNode()
will be null.- Parameters:
onTouchListener
- the touch listener to attach
-
addOnPeekTouchListener
public void addOnPeekTouchListener(Scene.OnPeekTouchListener onPeekTouchListener)
Adds a listener that will be called before theScene.OnTouchListener
is invoked. This is invoked even if the gesture was consumed, making it possible to observe all motion events dispatched to the scene. This is called even if the touch is not over a node, in which caseHitTestResult.getNode()
will be null. The listeners will be called in the order in which they were added.- Parameters:
onPeekTouchListener
- the peek touch listener to add
-
removeOnPeekTouchListener
public void removeOnPeekTouchListener(Scene.OnPeekTouchListener onPeekTouchListener)
Removes a listener that will be called before theScene.OnTouchListener
is invoked. This is invoked even if the gesture was consumed, making it possible to observe all motion events dispatched to the scene. This is called even if the touch is not over a node, in which caseHitTestResult.getNode()
will be null.- Parameters:
onPeekTouchListener
- the peek touch listener to remove
-
addOnUpdateListener
public void addOnUpdateListener(Scene.OnUpdateListener onUpdateListener)
Adds a listener that will be called once per frame immediately before the Scene is updated. The listeners will be called in the order in which they were added.- Parameters:
onUpdateListener
- the update listener to add
-
removeOnUpdateListener
public void removeOnUpdateListener(Scene.OnUpdateListener onUpdateListener)
Removes a listener that will be called once per frame immediately before the Scene is updated.- Parameters:
onUpdateListener
- the update listener to remove
-
onAddChild
public void onAddChild(Node child)
-
onRemoveChild
public void onRemoveChild(Node child)
-
hitTest
public HitTestResult hitTest(android.view.MotionEvent motionEvent, boolean onlySelectableNodes)
Tests to see if a motion event is touching any nodes within the scene, based on a ray hit test whose origin is the screen position of the motion event, and outputs a HitTestResult containing the node closest to the screen.- Parameters:
motionEvent
- the motion event to use for the testonlySelectableNodes
- Filter the HitTestResult on only selectable nodes- Returns:
- the result includes the first node that was hit by the motion event (may be null), and information about where the motion event hit the node in world-space
-
hitTest
public HitTestResult hitTest(Ray ray, boolean onlySelectableNodes)
Tests to see if a ray is hitting any nodes within the scene and outputs a HitTestResult containing the node closest to the ray origin that intersects with the ray.- Parameters:
ray
- the ray to use for the testonlySelectableNodes
- Filter the HitTestResult on only selectable nodes- Returns:
- the result includes the first node that was hit by the ray (may be null), and information about where the ray hit the node in world-space
- See Also:
Camera.screenPointToRay(float, float)
-
hitTestAll
public java.util.ArrayList<HitTestResult> hitTestAll(android.view.MotionEvent motionEvent)
Tests to see if a motion event is touching any nodes within the scene and returns a list of HitTestResults containing all of the nodes that were hit, sorted by distance.- Parameters:
motionEvent
- The motion event to use for the test.- Returns:
- Populated with a HitTestResult for each node that was hit sorted by distance. Empty if no nodes were hit.
-
hitTestAll
public java.util.ArrayList<HitTestResult> hitTestAll(Ray ray)
Tests to see if a ray is hitting any nodes within the scene and returns a list of HitTestResults containing all of the nodes that were hit, sorted by distance.- Parameters:
ray
- The ray to use for the test.- Returns:
- Populated with a HitTestResult for each node that was hit sorted by distance. Empty if no nodes were hit.
- See Also:
Camera.screenPointToRay(float, float)
-
overlapTest
@Nullable public Node overlapTest(Node node)
Tests to see if the given node's collision shape overlaps the collision shape of any other nodes in the scene usingNode.getCollisionShape()
. The node used for testing does not need to be active.- Parameters:
node
- The node to use for the test.- Returns:
- A node that is overlapping the test node. If no node is overlapping the test node, then this is null. If multiple nodes are overlapping the test node, then this could be any of them.
- See Also:
overlapTestAll(Node)
-
overlapTestAll
public java.util.ArrayList<Node> overlapTestAll(Node node)
Tests to see if a node is overlapping any other nodes within the scene usingNode.getCollisionShape()
. The node used for testing does not need to be active.- Parameters:
node
- The node to use for the test.- Returns:
- A list of all nodes that are overlapping the test node. If no node is overlapping the test node, then the list is empty.
- See Also:
overlapTest(Node)
-
getRenderer
@Nullable public Renderer getRenderer()
Returns the renderer used for this scene, or null if the renderer is not setup.
-
-