Formated LodControl before fixing a cloning issue
git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@10739 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
This commit is contained in:
parent
a33c7394e3
commit
b61192d71e
@ -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,7 +66,8 @@ public class LodControl extends AbstractControl implements Cloneable {
|
||||
private int[] numTris;
|
||||
|
||||
/**
|
||||
* Creates a new <code>LodControl</code>.
|
||||
* Creates a new
|
||||
* <code>LodControl</code>.
|
||||
*/
|
||||
public LodControl() {
|
||||
}
|
||||
@ -83,9 +84,9 @@ public class LodControl extends AbstractControl implements Cloneable {
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
@ -105,10 +106,10 @@ public class LodControl extends AbstractControl implements Cloneable {
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
@ -118,18 +119,21 @@ public class LodControl extends AbstractControl implements Cloneable {
|
||||
|
||||
@Override
|
||||
public void setSpatial(Spatial spatial) {
|
||||
if (!(spatial instanceof Geometry))
|
||||
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();
|
||||
@ -155,13 +159,13 @@ 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
|
||||
@ -199,5 +203,4 @@ public class LodControl extends AbstractControl implements Cloneable {
|
||||
numLevels = ic.readInt("numLevels", 0);
|
||||
numTris = ic.readIntArray("numTris", null);
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user