소스 검색

Formated LodControl before fixing a cloning issue

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@10739 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
rem..om 12 년 전
부모
커밋
b61192d71e
1개의 변경된 파일41개의 추가작업 그리고 38개의 파일을 삭제
  1. 41 38
      engine/src/core/com/jme3/scene/control/LodControl.java

+ 41 - 38
engine/src/core/com/jme3/scene/control/LodControl.java

@@ -47,14 +47,14 @@ import java.io.IOException;
 
 /**
  * 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.
+ * 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.
  */
 public class LodControl extends AbstractControl implements Cloneable {
 
@@ -66,27 +66,28 @@ public class LodControl extends AbstractControl implements Cloneable {
     private int[] numTris;
 
     /**
-     * Creates a new <code>LodControl</code>.
+     * Creates a new
+     * <code>LodControl</code>.
      */
-    public LodControl(){
+    public LodControl() {
     }
 
     /**
      * Returns the distance tolerance for changing LOD.
-     * 
+     *
      * @return the distance tolerance for changing LOD.
-     * 
-     * @see #setDistTolerance(float) 
+     *
+     * @see #setDistTolerance(float)
      */
     public float getDistTolerance() {
         return 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.
-     * 
+     * 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.
+     *
      * @param distTolerance distance tolerance for changing LOD
      */
     public void setDistTolerance(float distTolerance) {
@@ -95,21 +96,21 @@ public class LodControl extends AbstractControl implements Cloneable {
 
     /**
      * Returns the triangles per pixel value.
-     * 
+     *
      * @return the triangles per pixel value.
-     * 
-     * @see #setTrisPerPixel(float) 
+     *
+     * @see #setTrisPerPixel(float)
      */
     public float getTrisPerPixel() {
         return trisPerPixel;
     }
 
     /**
-     * Sets the triangles per pixel value.
-     * The <code>LodControl</code> will use this value as an error metric
-     * to determine which LOD level to use based on the geometry's
-     * area on the screen.
-     * 
+     * Sets the triangles per pixel value. The
+     * <code>LodControl</code> will use this value as an error metric to
+     * determine which LOD level to use based on the geometry's area on the
+     * screen.
+     *
      * @param trisPerPixel triangles per pixel
      */
     public void setTrisPerPixel(float trisPerPixel) {
@@ -117,19 +118,22 @@ public class LodControl extends AbstractControl implements Cloneable {
     }
 
     @Override
-    public void setSpatial(Spatial spatial){
-        if (!(spatial instanceof Geometry))
+    public void setSpatial(Spatial spatial) {
+        if (!(spatial instanceof Geometry)) {
             throw new IllegalArgumentException("LodControl can only be attached to Geometry!");
+        }
 
         super.setSpatial(spatial);
         Geometry geom = (Geometry) spatial;
         Mesh mesh = geom.getMesh();
         numLevels = mesh.getNumLodLevels();
         numTris = new int[numLevels];
-        for (int i = numLevels - 1; i >= 0; i--)
+        for (int i = numLevels - 1; i >= 0; i--) {
             numTris[i] = mesh.getTriangleCount(i);
+        }
     }
 
+    @Override
     public Control cloneForSpatial(Spatial spatial) {
         try {
             LodControl clone = (LodControl) super.clone();
@@ -146,7 +150,7 @@ public class LodControl extends AbstractControl implements Cloneable {
     protected void controlUpdate(float tpf) {
     }
 
-    protected void controlRender(RenderManager rm, ViewPort vp){
+    protected void controlRender(RenderManager rm, ViewPort vp) {
         BoundingVolume bv = spatial.getWorldBound();
 
         Camera cam = vp.getCamera();
@@ -155,21 +159,21 @@ public class LodControl extends AbstractControl implements Cloneable {
         float newDistance = bv.distanceTo(vp.getCamera().getLocation()) / ratio;
         int level;
 
-        if (Math.abs(newDistance - lastDistance) <= distTolerance)
+        if (Math.abs(newDistance - lastDistance) <= distTolerance) {
             level = lastLevel; // we haven't moved relative to the model, send the old measurement back.
-        else if (lastDistance > newDistance && lastLevel == 0)
+        } else if (lastDistance > newDistance && lastLevel == 0) {
             level = lastLevel; // we're already at the lowest setting and we just got closer to the model, no need to keep trying.
-        else if (lastDistance < newDistance && lastLevel == numLevels - 1)
+        } else if (lastDistance < newDistance && lastLevel == numLevels - 1) {
             level = lastLevel; // we're already at the highest setting and we just got further from the model, no need to keep trying.
-        else{
+        } else {
             lastDistance = newDistance;
 
             // estimate area of polygon via bounding volume
             float area = AreaUtils.calcScreenArea(bv, lastDistance, cam.getWidth());
             float trisToDraw = area * trisPerPixel;
             level = numLevels - 1;
-            for (int i = numLevels; --i >= 0;){
-                if (trisToDraw - numTris[i] < 0){
+            for (int i = numLevels; --i >= 0;) {
+                if (trisToDraw - numTris[i] < 0) {
                     break;
                 }
                 level = i;
@@ -181,7 +185,7 @@ public class LodControl extends AbstractControl implements Cloneable {
     }
 
     @Override
-    public void write(JmeExporter ex) throws IOException{
+    public void write(JmeExporter ex) throws IOException {
         super.write(ex);
         OutputCapsule oc = ex.getCapsule(this);
         oc.write(trisPerPixel, "trisPerPixel", 1f);
@@ -191,7 +195,7 @@ public class LodControl extends AbstractControl implements Cloneable {
     }
 
     @Override
-    public void read(JmeImporter im) throws IOException{
+    public void read(JmeImporter im) throws IOException {
         super.read(im);
         InputCapsule ic = im.getCapsule(this);
         trisPerPixel = ic.readFloat("trisPerPixel", 1f);
@@ -199,5 +203,4 @@ public class LodControl extends AbstractControl implements Cloneable {
         numLevels = ic.readInt("numLevels", 0);
         numTris = ic.readIntArray("numTris", null);
     }
-
 }