public int compare(final Spatial o1, final Spatial o2) { if (o2.getSceneHints().getOrthoOrder() == o1.getSceneHints().getOrthoOrder()) { return 0; } else if (o2.getSceneHints().getOrthoOrder() < o1.getSceneHints().getOrthoOrder()) { return -1; } else { return 1; } } }
public int compare(final Spatial o1, final Spatial o2) { if (o2.getSceneHints().getOrthoOrder() == o1.getSceneHints().getOrthoOrder()) { return 0; } else if (o2.getSceneHints().getOrthoOrder() < o1.getSceneHints().getOrthoOrder()) { return -1; } else { return 1; } } }
void applyTo(final Spatial spatial) { spatial.setRenderState(textureState); spatial.setRenderState(blendState); spatial.setRenderState(zBuffState); if (_useBlend) { spatial.getSceneHints().setRenderBucketType(RenderBucketType.PostBucket); } else { spatial.getSceneHints().setRenderBucketType(RenderBucketType.Opaque); } }
void applyTo(final Spatial spatial) { spatial.setRenderState(textureState); spatial.setRenderState(blendState); spatial.setRenderState(zBuffState); if (_useBlend) { spatial.getSceneHints().setRenderBucketType(RenderBucketType.Transparent); } else { spatial.getSceneHints().setRenderBucketType(RenderBucketType.Opaque); } }
@Override public boolean checkAndAdd(final Spatial s) { final RenderBucketType rqMode = s.getSceneHints().getRenderBucketType(); if (rqMode != RenderBucketType.Skip) { getQueue().addToQueue(s, rqMode); return true; } return false; }
public boolean checkAndAdd(final Spatial s) { final RenderBucketType rqMode = s.getSceneHints().getRenderBucketType(); if (rqMode != RenderBucketType.Skip) { getQueue().addToQueue(s, rqMode); return true; } return false; }
public boolean checkAndAdd(final Spatial s) { final RenderBucketType rqMode = s.getSceneHints().getRenderBucketType(); if (rqMode != RenderBucketType.Skip) { getQueue().addToQueue(s, rqMode); return true; } return false; }
private void applyCurrentMaterial(final Spatial target) { _currentMaterial.applyMaterialProperties(target); final TextureState tState = _currentMaterial.getTextureState(); if (tState != null) { target.setRenderState(tState); } final BlendState blend = _currentMaterial.getBlendState(); if (blend != null) { target.setRenderState(blend); target.getSceneHints().setRenderBucketType(RenderBucketType.Transparent); } if (_currentMaterial.illumType == 0) { target.getSceneHints().setLightCombineMode(LightCombineMode.Off); } _materialMap.put(target, _currentMaterial.getName()); }
/** * Sets a spatial up for being rendered with the watereffect * * @param spatial * Spatial to use as base for the watereffect */ public void setWaterEffectOnSpatial(final Spatial spatial) { spatial.setRenderState(cullBackFace); if (isSupported()) { // spatial.setRenderBucketType(RenderBucketType.Skip); spatial.setRenderState(waterShader); spatial.setRenderState(textureState); } else { spatial.getSceneHints().setRenderBucketType(RenderBucketType.Transparent); spatial.getSceneHints().setLightCombineMode(LightCombineMode.Off); spatial.setRenderState(fallbackTextureState); spatial.setRenderState(as1); } }
/** * Finds a pick using the given ray starting at the scenegraph given as spatial. Results are stored in the given * results value. * * @param spatial * @param ray * @param results * @param ignoreCulled * if true, Spatials with CullHint ALWAYS will be skipped. */ public static void findPick(final Spatial spatial, final Ray3 ray, final PickResults results, final boolean ignoreCulled) { if (spatial == null || !spatial.getSceneHints().isPickingHintEnabled(PickingHint.Pickable) || (ignoreCulled && spatial.getSceneHints().getCullHint() == CullHint.Always) || spatial.getWorldBound() == null || !spatial.getWorldBound().intersects(ray)) { return; } if (spatial instanceof Pickable) { results.addPick(ray, (Pickable) spatial); } else if (spatial instanceof Node) { final Node node = (Node) spatial; for (int i = node.getNumberOfChildren() - 1; i >= 0; i--) { findPick(node.getChild(i), ray, results, ignoreCulled); } } }
/** * @param key * property key * @return true if we have the given key somewhere reachable in the scenegraph, based on our SceneHints. */ public boolean hasProperty(final String key) { final PropertyMode mode = getSceneHints().getPropertyMode(); final boolean hasLocal = hasLocalProperty(key); if (mode == PropertyMode.UseOwn) { return hasLocal; } final Node parent = getParent(); if (mode == PropertyMode.UseParentIfUnset) { return hasLocal || parent != null && parent.hasProperty(key); } if (mode == PropertyMode.UseOursLast) { final boolean parentHasProperty = parent != null && parent.hasProperty(key); return parentHasProperty || hasLocal; } return false; }
/** * Finds a pick using the given ray starting at the scenegraph given as spatial. Results are stored in the given * results value. * * @param spatial * @param ray * @param results * @param ignoreCulled * if true, Spatials with CullHint ALWAYS will be skipped. */ public static void findPick(final Spatial spatial, final Ray3 ray, final PickResults results, final boolean ignoreCulled) { if (spatial == null || !spatial.getSceneHints().isPickingHintEnabled(PickingHint.Pickable) || (ignoreCulled && spatial.getSceneHints().getCullHint() == CullHint.Always) || spatial.getWorldBound() == null || !spatial.getWorldBound().intersects(ray)) { return; } if (spatial instanceof Pickable) { results.addPick(ray, (Pickable) spatial); } else if (spatial instanceof Node) { final Node node = (Node) spatial; for (int i = node.getNumberOfChildren() - 1; i >= 0; i--) { findPick(node.getChild(i), ray, results, ignoreCulled); } } }
/** * Create a copy of this spatial. * * @param shareGeometricData * if true, reuse any data fields describing the geometric shape of the spatial, as applicable. * @return the copy as described. */ public Spatial makeCopy(final boolean shareGeometricData) { final Spatial spat = duplicate(); // copy basic spatial info spat.setName(getName()); spat.getSceneHints().set(_sceneHints); spat.setTransform(_localTransform); // copy local render states for (final StateType type : _renderStateList.keySet()) { final RenderState state = _renderStateList.get(type); if (state != null) { spat.setRenderState(state); } } // copy controllers if (_controllers != null) { for (final SpatialController<?> sc : _controllers) { spat.addController(sc); } } return spat; }
/** * Create a copy of this spatial. * * @param shareGeometricData * if true, reuse any data fields describing the geometric shape of the spatial, as applicable. * @return the copy as described. */ public Spatial makeCopy(final boolean shareGeometricData) { final Spatial spat = duplicate(); // copy basic spatial info spat.setName(getName()); spat.getSceneHints().set(_sceneHints); spat.setTransform(_localTransform); // copy local render states for (final StateType type : _renderStateList.keySet()) { final RenderState state = _renderStateList.get(type); if (state != null) { spat.setRenderState(state); } } // copy controllers if (_controllers != null) { for (final SpatialController<?> sc : _controllers) { spat.addController(sc); } } return spat; }
public static void findCollisions(final Spatial spatial, final Spatial scene, final CollisionResults results) { if (spatial == scene || spatial.getWorldBound() == null || !spatial.getSceneHints().isPickingHintEnabled(PickingHint.Collidable) || !scene.getSceneHints().isPickingHintEnabled(PickingHint.Collidable)) { return; } if (spatial instanceof Node) { final Node node = (Node) spatial; if (node.getWorldBound().intersects(scene.getWorldBound())) { // further checking needed. for (int i = 0; i < node.getNumberOfChildren(); i++) { PickingUtil.findCollisions(node.getChild(i), scene, results); } } } else if (spatial instanceof Mesh) { final Mesh mesh = (Mesh) spatial; if (mesh.getWorldBound().intersects(scene.getWorldBound())) { if (scene instanceof Node) { final Node parent = (Node) scene; for (int i = 0; i < parent.getNumberOfChildren(); i++) { PickingUtil.findCollisions(mesh, parent.getChild(i), results); } } else { results.addCollision(mesh, (Mesh) scene); } } } }
public static void findCollisions(final Spatial spatial, final Spatial scene, final CollisionResults results) { if (spatial == scene || spatial.getWorldBound() == null || !spatial.getSceneHints().isPickingHintEnabled(PickingHint.Collidable) || !scene.getSceneHints().isPickingHintEnabled(PickingHint.Collidable)) { return; } if (spatial instanceof Node) { final Node node = (Node) spatial; if (node.getWorldBound().intersects(scene.getWorldBound())) { // further checking needed. for (int i = 0; i < node.getNumberOfChildren(); i++) { PickingUtil.findCollisions(node.getChild(i), scene, results); } } } else if (spatial instanceof Mesh) { final Mesh mesh = (Mesh) spatial; if (mesh.getWorldBound().intersects(scene.getWorldBound())) { if (scene instanceof Node) { final Node parent = (Node) scene; for (int i = 0; i < parent.getNumberOfChildren(); i++) { PickingUtil.findCollisions(mesh, parent.getChild(i), results); } } else { results.addCollision(mesh, (Mesh) scene); } } } }
/** * Get a property from this spatial, optionally inheriting values from higher in the scenegraph based upon the * {@link PropertyMode} set in our scene hints. * * @param key * property key * @return the found property, cast to T * @throws ClassCastException * if property is not correct type */ public <T> T getProperty(final String key, final T defaultValue) { final PropertyMode mode = getSceneHints().getPropertyMode(); if (mode == PropertyMode.UseOwn) { return getLocalProperty(key, defaultValue); } final Node parent = getParent(); if (mode == PropertyMode.UseParentIfUnset) { if (hasLocalProperty(key)) { return getLocalProperty(key, defaultValue); } return parent != null ? parent.getProperty(key, defaultValue) : defaultValue; } if (mode == PropertyMode.UseOursLast) { if (parent.hasProperty(key)) { return parent.getProperty(key, defaultValue); } return getLocalProperty(key, defaultValue); } return defaultValue; }
public static boolean hasCollision(final Spatial spatial, final Spatial scene, final boolean checkPrimitives) { if (spatial == scene || spatial.getWorldBound() == null || !spatial.getSceneHints().isPickingHintEnabled(PickingHint.Collidable) || !scene.getSceneHints().isPickingHintEnabled(PickingHint.Collidable)) { return false;
if (se.getWorldBound() != null && se.getSceneHints().getCullHint() != CullHint.Always) { final Camera cam = Camera.getCurrentCamera(); final int state = cam.getPlaneState();
if (se.getWorldBound() != null && se.getSceneHints().getCullHint() != CullHint.Always) { final Camera cam = Camera.getCurrentCamera(); final int state = cam.getPlaneState();