/** * <code>updateGeometricState</code> updates the lightlist, computes the world transforms, and * computes the world bounds for this Spatial. Calling this when the Spatial is attached to a node * will cause undefined results. User code should only call this method on Spatials having no * parent. * * @see Spatial#getWorldLightList() * @see Spatial#getWorldTransform() * @see Spatial#getWorldBound() */ public void updateGeometricState() { // assume that this Spatial is a leaf, a proper implementation // for this method should be provided by Node. // NOTE: Update world transforms first because // bound transform depends on them. if ((refreshFlags & RF_LIGHTLIST) != 0) { updateWorldLightList(); } if ((refreshFlags & RF_TRANSFORM) != 0) { updateWorldTransforms(); } if ((refreshFlags & RF_BOUND) != 0) { updateWorldBound(); } assert refreshFlags == 0; }
/** Computes this Spatial's world bounding volume in the most efficient manner possible. */ void checkDoBoundUpdate() { if ((refreshFlags & RF_BOUND) == 0) { return; } checkDoTransformUpdate(); // Go to children recursively and update their bound if (this instanceof Node) { Node node = (Node) this; int len = node.getQuantity(); for (int i = 0; i < len; i++) { Spatial child = node.getChild(i); child.checkDoBoundUpdate(); } } // All children's bounds have been updated. Update my own now. updateWorldBound(); }