Class LodControl

java.lang.Object
com.jme3.scene.control.AbstractControl
com.jme3.scene.control.LodControl
All Implemented Interfaces:
Savable, Control, JmeCloneable, Cloneable

public class LodControl extends AbstractControl implements Cloneable, JmeCloneable
Determines what Level of Detail a spatial should be, based on how many pixels on the screen the spatial is taking up. The more pixels covered, the more detailed the spatial should be. It calculates the area of the screen that the spatial covers by using its bounding box. When initializing, it will ask the spatial for how many triangles it has for each LOD. It then uses that, along with the trisPerPixel value to determine what LOD it should be at. It requires the camera to do this. The controlRender method is called each frame and will update the spatial's LOD if the camera has moved by a specified amount.
  • Constructor Details

    • LodControl

      public LodControl()
      Creates a new LodControl.
  • Method Details

    • getDistTolerance

      public float getDistTolerance()
      Returns the distance tolerance for changing LOD.
      Returns:
      the distance tolerance for changing LOD.
      See Also:
    • setDistTolerance

      public void setDistTolerance(float distTolerance)
      Specifies the distance tolerance for changing the LOD level on the geometry. The LOD level will only get changed if the geometry has moved this distance beyond the current LOD level.
      Parameters:
      distTolerance - distance tolerance for changing LOD
    • getTrisPerPixel

      public float getTrisPerPixel()
      Returns the triangles per pixel value.
      Returns:
      the triangles per pixel value.
      See Also:
    • setTrisPerPixel

      public void setTrisPerPixel(float trisPerPixel)
      Sets the triangles per pixel value. The LodControl will use this value as an error metric to determine which LOD level to use based on the geometry's area on the screen.
      Parameters:
      trisPerPixel - triangles per pixel
    • setSpatial

      public void setSpatial(Spatial spatial)
      Specified by:
      setSpatial in interface Control
      Overrides:
      setSpatial in class AbstractControl
      Parameters:
      spatial - the spatial to be controlled. This should not be called from user code.
    • jmeClone

      public Object jmeClone()
      Description copied from interface: JmeCloneable
      Performs a regular shallow clone of the object. Some fields may also be cloned but generally only if they will never be shared with other objects. (For example, local Vector3fs and so on.)

      This method is separate from the regular clone() method so that objects might still maintain their own regular java clone() semantics (perhaps even using Cloner for those methods). However, because Java's clone() has specific features in the sense of Object's clone() implementation, it's usually best to have some path for subclasses to bypass the public clone() method that might be cloning fields and instead get at the superclass protected clone() methods. For example, through super.jmeClone() or another protected clone method that some base class eventually calls super.clone() in.

      Specified by:
      jmeClone in interface JmeCloneable
      Overrides:
      jmeClone in class AbstractControl
      Returns:
      a new instance
    • controlUpdate

      protected void controlUpdate(float tpf)
      Description copied from class: AbstractControl
      To be implemented in subclass.
      Specified by:
      controlUpdate in class AbstractControl
      Parameters:
      tpf - time per frame (in seconds)
    • controlRender

      protected void controlRender(RenderManager rm, ViewPort vp)
      Description copied from class: AbstractControl
      To be implemented in subclass.
      Specified by:
      controlRender in class AbstractControl
      Parameters:
      rm - the RenderManager rendering the controlled Spatial (not null)
      vp - the ViewPort being rendered (not null)
    • write

      public void write(JmeExporter ex) throws IOException
      Specified by:
      write in interface Savable
      Overrides:
      write in class AbstractControl
      Throws:
      IOException
    • read

      public void read(JmeImporter im) throws IOException
      Specified by:
      read in interface Savable
      Overrides:
      read in class AbstractControl
      Throws:
      IOException