improve formatting and rm trailing whitespace (16 files in jme3-core)
This commit is contained in:
parent
f46a6fac11
commit
e99c8a74a3
@ -138,8 +138,10 @@ public class BoundingBox extends BoundingVolume {
|
|||||||
|
|
||||||
TempVars vars = TempVars.get();
|
TempVars vars = TempVars.get();
|
||||||
|
|
||||||
Vector3f min = vars.vect1.set(new Vector3f(Float.POSITIVE_INFINITY, Float.POSITIVE_INFINITY, Float.POSITIVE_INFINITY));
|
Vector3f min = vars.vect1.set(new Vector3f(Float.POSITIVE_INFINITY,
|
||||||
Vector3f max = vars.vect2.set(new Vector3f(Float.NEGATIVE_INFINITY, Float.NEGATIVE_INFINITY, Float.NEGATIVE_INFINITY));
|
Float.POSITIVE_INFINITY, Float.POSITIVE_INFINITY));
|
||||||
|
Vector3f max = vars.vect2.set(new Vector3f(Float.NEGATIVE_INFINITY,
|
||||||
|
Float.NEGATIVE_INFINITY, Float.NEGATIVE_INFINITY));
|
||||||
|
|
||||||
Vector3f point;
|
Vector3f point;
|
||||||
for (int i = start; i < end; i++) {
|
for (int i = start; i < end; i++) {
|
||||||
@ -240,8 +242,12 @@ public class BoundingBox extends BoundingVolume {
|
|||||||
|
|
||||||
float[] tmpArray = vars.skinPositions;
|
float[] tmpArray = vars.skinPositions;
|
||||||
|
|
||||||
float minX = Float.POSITIVE_INFINITY, minY = Float.POSITIVE_INFINITY, minZ = Float.POSITIVE_INFINITY;
|
float minX = Float.POSITIVE_INFINITY,
|
||||||
float maxX = Float.NEGATIVE_INFINITY, maxY = Float.NEGATIVE_INFINITY, maxZ = Float.NEGATIVE_INFINITY;
|
minY = Float.POSITIVE_INFINITY,
|
||||||
|
minZ = Float.POSITIVE_INFINITY;
|
||||||
|
float maxX = Float.NEGATIVE_INFINITY,
|
||||||
|
maxY = Float.NEGATIVE_INFINITY,
|
||||||
|
maxZ = Float.NEGATIVE_INFINITY;
|
||||||
|
|
||||||
int iterations = (int) FastMath.ceil(points.limit() / ((float) tmpArray.length));
|
int iterations = (int) FastMath.ceil(points.limit() / ((float) tmpArray.length));
|
||||||
for (int i = iterations - 1; i >= 0; i--) {
|
for (int i = iterations - 1; i >= 0; i--) {
|
||||||
@ -317,7 +323,9 @@ public class BoundingBox extends BoundingVolume {
|
|||||||
transMatrix.absoluteLocal();
|
transMatrix.absoluteLocal();
|
||||||
|
|
||||||
Vector3f scale = trans.getScale();
|
Vector3f scale = trans.getScale();
|
||||||
vars.vect1.set(xExtent * FastMath.abs(scale.x), yExtent * FastMath.abs(scale.y), zExtent * FastMath.abs(scale.z));
|
vars.vect1.set(xExtent * FastMath.abs(scale.x),
|
||||||
|
yExtent * FastMath.abs(scale.y),
|
||||||
|
zExtent * FastMath.abs(scale.z));
|
||||||
transMatrix.mult(vars.vect1, vars.vect2);
|
transMatrix.mult(vars.vect1, vars.vect2);
|
||||||
// Assign the biggest rotations after scales.
|
// Assign the biggest rotations after scales.
|
||||||
box.xExtent = FastMath.abs(vars.vect2.getX());
|
box.xExtent = FastMath.abs(vars.vect2.getX());
|
||||||
@ -339,7 +347,6 @@ public class BoundingBox extends BoundingVolume {
|
|||||||
}
|
}
|
||||||
TempVars vars = TempVars.get();
|
TempVars vars = TempVars.get();
|
||||||
|
|
||||||
|
|
||||||
float w = trans.multProj(center, box.center);
|
float w = trans.multProj(center, box.center);
|
||||||
box.center.divideLocal(w);
|
box.center.divideLocal(w);
|
||||||
|
|
||||||
@ -432,13 +439,12 @@ public class BoundingBox extends BoundingVolume {
|
|||||||
// case OBB: {
|
// case OBB: {
|
||||||
// return mergeOBB((OrientedBoundingBox) volume);
|
// return mergeOBB((OrientedBoundingBox) volume);
|
||||||
// }
|
// }
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* Merges this AABB with the given OBB.
|
* Merges this AABB with the given OBB.
|
||||||
*
|
*
|
||||||
* @param volume
|
* @param volume
|
||||||
@ -481,6 +487,7 @@ public class BoundingBox extends BoundingVolume {
|
|||||||
// zExtent = max.z - center.z;
|
// zExtent = max.z - center.z;
|
||||||
// return this;
|
// return this;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <code>mergeLocal</code> combines this bounding box locally with a second
|
* <code>mergeLocal</code> combines this bounding box locally with a second
|
||||||
* bounding box described by its center and extents.
|
* bounding box described by its center and extents.
|
||||||
@ -632,7 +639,7 @@ public class BoundingBox extends BoundingVolume {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* determines if this bounding box intersects with a given oriented bounding
|
* determines if this bounding box intersects with a given oriented bounding
|
||||||
* box.
|
* box.
|
||||||
*
|
*
|
||||||
@ -783,8 +790,11 @@ public class BoundingBox extends BoundingVolume {
|
|||||||
&& clip(-direction.z, +diff.z - zExtent, t);
|
&& clip(-direction.z, +diff.z - zExtent, t);
|
||||||
|
|
||||||
if (notEntirelyClipped && (t[0] != saveT0 || t[1] != saveT1)) {
|
if (notEntirelyClipped && (t[0] != saveT0 || t[1] != saveT1)) {
|
||||||
if (t[1] > t[0]) return 2;
|
if (t[1] > t[0]) {
|
||||||
else return 1;
|
return 2;
|
||||||
|
} else {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
} finally {
|
} finally {
|
||||||
|
@ -49,7 +49,6 @@ import java.nio.FloatBuffer;
|
|||||||
* @version $Id: BoundingVolume.java,v 1.24 2007/09/21 15:45:32 nca Exp $
|
* @version $Id: BoundingVolume.java,v 1.24 2007/09/21 15:45:32 nca Exp $
|
||||||
*/
|
*/
|
||||||
public abstract class BoundingVolume implements Savable, Cloneable, Collidable {
|
public abstract class BoundingVolume implements Savable, Cloneable, Collidable {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The type of bounding volume being used.
|
* The type of bounding volume being used.
|
||||||
*/
|
*/
|
||||||
@ -58,12 +57,10 @@ public abstract class BoundingVolume implements Savable, Cloneable, Collidable {
|
|||||||
* {@link BoundingSphere}
|
* {@link BoundingSphere}
|
||||||
*/
|
*/
|
||||||
Sphere,
|
Sphere,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@link BoundingBox}.
|
* {@link BoundingBox}.
|
||||||
*/
|
*/
|
||||||
AABB,
|
AABB,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Currently unsupported by jME3.
|
* Currently unsupported by jME3.
|
||||||
*/
|
*/
|
||||||
@ -82,7 +79,6 @@ public abstract class BoundingVolume implements Savable, Cloneable, Collidable {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Grabs the checkplane we should check first.
|
* Grabs the checkplane we should check first.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public int getCheckPlane() {
|
public int getCheckPlane() {
|
||||||
return checkPlane;
|
return checkPlane;
|
||||||
@ -103,7 +99,6 @@ public abstract class BoundingVolume implements Savable, Cloneable, Collidable {
|
|||||||
public abstract Type getType();
|
public abstract Type getType();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* <code>transform</code> alters the location of the bounding volume by a
|
* <code>transform</code> alters the location of the bounding volume by a
|
||||||
* rotation, translation and a scalar.
|
* rotation, translation and a scalar.
|
||||||
*
|
*
|
||||||
@ -116,7 +111,6 @@ public abstract class BoundingVolume implements Savable, Cloneable, Collidable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* <code>transform</code> alters the location of the bounding volume by a
|
* <code>transform</code> alters the location of the bounding volume by a
|
||||||
* rotation, translation and a scalar.
|
* rotation, translation and a scalar.
|
||||||
*
|
*
|
||||||
@ -131,7 +125,6 @@ public abstract class BoundingVolume implements Savable, Cloneable, Collidable {
|
|||||||
public abstract BoundingVolume transform(Matrix4f trans, BoundingVolume store);
|
public abstract BoundingVolume transform(Matrix4f trans, BoundingVolume store);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* <code>whichSide</code> returns the side on which the bounding volume
|
* <code>whichSide</code> returns the side on which the bounding volume
|
||||||
* lies on a plane. Possible values are POSITIVE_SIDE, NEGATIVE_SIDE, and
|
* lies on a plane. Possible values are POSITIVE_SIDE, NEGATIVE_SIDE, and
|
||||||
* NO_SIDE.
|
* NO_SIDE.
|
||||||
@ -143,7 +136,6 @@ public abstract class BoundingVolume implements Savable, Cloneable, Collidable {
|
|||||||
public abstract Plane.Side whichSide(Plane plane);
|
public abstract Plane.Side whichSide(Plane plane);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* <code>computeFromPoints</code> generates a bounding volume that
|
* <code>computeFromPoints</code> generates a bounding volume that
|
||||||
* encompasses a collection of points.
|
* encompasses a collection of points.
|
||||||
*
|
*
|
||||||
@ -255,7 +247,6 @@ public abstract class BoundingVolume implements Savable, Cloneable, Collidable {
|
|||||||
*/
|
*/
|
||||||
public abstract boolean intersects(Ray ray);
|
public abstract boolean intersects(Ray ray);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* determines if this bounding volume and a given bounding sphere are
|
* determines if this bounding volume and a given bounding sphere are
|
||||||
* intersecting.
|
* intersecting.
|
||||||
@ -276,7 +267,7 @@ public abstract class BoundingVolume implements Savable, Cloneable, Collidable {
|
|||||||
*/
|
*/
|
||||||
public abstract boolean intersectsBoundingBox(BoundingBox bb);
|
public abstract boolean intersectsBoundingBox(BoundingBox bb);
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* determines if this bounding volume and a given bounding box are
|
* determines if this bounding volume and a given bounding box are
|
||||||
* intersecting.
|
* intersecting.
|
||||||
*
|
*
|
||||||
@ -286,7 +277,6 @@ public abstract class BoundingVolume implements Savable, Cloneable, Collidable {
|
|||||||
*/
|
*/
|
||||||
// public abstract boolean intersectsOrientedBoundingBox(OrientedBoundingBox bb);
|
// public abstract boolean intersectsOrientedBoundingBox(OrientedBoundingBox bb);
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* determines if a given point is contained within this bounding volume.
|
* determines if a given point is contained within this bounding volume.
|
||||||
* If the point is on the edge of the bounding volume, this method will
|
* If the point is on the edge of the bounding volume, this method will
|
||||||
* return false. Use intersects(Vector3f) to check for edge intersection.
|
* return false. Use intersects(Vector3f) to check for edge intersection.
|
||||||
@ -299,6 +289,7 @@ public abstract class BoundingVolume implements Savable, Cloneable, Collidable {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Determines if a given point intersects (touches or is inside) this bounding volume.
|
* Determines if a given point intersects (touches or is inside) this bounding volume.
|
||||||
|
*
|
||||||
* @param point the point to check
|
* @param point the point to check
|
||||||
* @return true if the point lies within this bounding volume.
|
* @return true if the point lies within this bounding volume.
|
||||||
*/
|
*/
|
||||||
@ -338,4 +329,3 @@ public abstract class BoundingVolume implements Savable, Cloneable, Collidable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2009-2012 jMonkeyEngine
|
* Copyright (c) 2009-2020 jMonkeyEngine
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@ -36,21 +36,22 @@ import java.util.List;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* This class offers methods to help with curves and surfaces calculations.
|
* This class offers methods to help with curves and surfaces calculations.
|
||||||
|
*
|
||||||
* @author Marcin Roguski (Kealthas)
|
* @author Marcin Roguski (Kealthas)
|
||||||
*/
|
*/
|
||||||
public class CurveAndSurfaceMath {
|
public class CurveAndSurfaceMath {
|
||||||
private static final float KNOTS_MINIMUM_DELTA = 0.0001f;
|
private static final float KNOTS_MINIMUM_DELTA = 0.0001f;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A private constructor is defined to avoid instantiation of this
|
* A private constructor is defined to avoid instantiation of this class.
|
||||||
* class.
|
|
||||||
*/
|
*/
|
||||||
private CurveAndSurfaceMath() {}
|
private CurveAndSurfaceMath() {
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method interpolates the data for the nurbs curve.
|
* This method interpolates the data for the nurbs curve.
|
||||||
* @param u
|
*
|
||||||
* the u value
|
* @param u the u value
|
||||||
* @param nurbSpline
|
* @param nurbSpline
|
||||||
* the nurbs spline definition
|
* the nurbs spline definition
|
||||||
* @param store
|
* @param store
|
||||||
@ -64,7 +65,6 @@ public class CurveAndSurfaceMath {
|
|||||||
float[] weights = nurbSpline.getWeights();
|
float[] weights = nurbSpline.getWeights();
|
||||||
List<Float> knots = nurbSpline.getKnots();
|
List<Float> knots = nurbSpline.getKnots();
|
||||||
int controlPointAmount = controlPoints.size();
|
int controlPointAmount = controlPoints.size();
|
||||||
|
|
||||||
store.set(Vector3f.ZERO);
|
store.set(Vector3f.ZERO);
|
||||||
float delimeter = 0;
|
float delimeter = 0;
|
||||||
for (int i = 0; i < controlPointAmount; ++i) {
|
for (int i = 0; i < controlPointAmount; ++i) {
|
||||||
@ -79,10 +79,8 @@ public class CurveAndSurfaceMath {
|
|||||||
/**
|
/**
|
||||||
* This method interpolates the data for the nurbs surface.
|
* This method interpolates the data for the nurbs surface.
|
||||||
*
|
*
|
||||||
* @param u
|
* @param u the u value
|
||||||
* the u value
|
* @param v the v value
|
||||||
* @param v
|
|
||||||
* the v value
|
|
||||||
* @param controlPoints
|
* @param controlPoints
|
||||||
* the nurbs' control points
|
* the nurbs' control points
|
||||||
* @param knots
|
* @param knots
|
||||||
@ -114,8 +112,11 @@ public class CurveAndSurfaceMath {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method prepares the knots to be used. If the knots represent non-uniform B-splines (first and last knot values are being
|
* This method prepares the knots to be used. If the knots represent
|
||||||
* repeated) it leads to NaN results during calculations. This method adds a small number to each of such knots to avoid NaN's.
|
* non-uniform B-splines (first and last knot values are being repeated) it
|
||||||
|
* leads to NaN results during calculations. This method adds a small number
|
||||||
|
* to each of such knots to avoid NaN's.
|
||||||
|
*
|
||||||
* @param knots
|
* @param knots
|
||||||
* the knots to be prepared to use
|
* the knots to be prepared to use
|
||||||
* @param basisFunctionDegree
|
* @param basisFunctionDegree
|
||||||
@ -142,12 +143,10 @@ public class CurveAndSurfaceMath {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* This method computes the base function value for the NURB curve.
|
* This method computes the base function value for the NURB curve.
|
||||||
* @param i
|
*
|
||||||
* the knot index
|
* @param i the knot index
|
||||||
* @param k
|
* @param k the base function degree
|
||||||
* the base function degree
|
* @param t the knot value
|
||||||
* @param t
|
|
||||||
* the knot value
|
|
||||||
* @param knots
|
* @param knots
|
||||||
* the knots' values
|
* the knots' values
|
||||||
* @return the base function value
|
* @return the base function value
|
||||||
@ -156,10 +155,10 @@ public class CurveAndSurfaceMath {
|
|||||||
if (k == 1) {
|
if (k == 1) {
|
||||||
return knots.get(i) <= t && t < knots.get(i + 1) ? 1.0f : 0.0f;
|
return knots.get(i) <= t && t < knots.get(i + 1) ? 1.0f : 0.0f;
|
||||||
} else {
|
} else {
|
||||||
return (t - knots.get(i)) / (knots.get(i + k - 1) - knots.get(i)) *
|
return (t - knots.get(i)) / (knots.get(i + k - 1) - knots.get(i))
|
||||||
CurveAndSurfaceMath.computeBaseFunctionValue(i, k - 1, t, knots)
|
* CurveAndSurfaceMath.computeBaseFunctionValue(i, k - 1, t, knots)
|
||||||
+ (knots.get(i + k) - t) / (knots.get(i + k) - knots.get(i + 1)) *
|
+ (knots.get(i + k) - t) / (knots.get(i + k) - knots.get(i + 1))
|
||||||
CurveAndSurfaceMath.computeBaseFunctionValue(i + 1, k - 1, t, knots);
|
* CurveAndSurfaceMath.computeBaseFunctionValue(i + 1, k - 1, t, knots);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -41,33 +41,56 @@ import java.util.Random;
|
|||||||
* @version $Id: FastMath.java,v 1.45 2007/08/26 08:44:20 irrisor Exp $
|
* @version $Id: FastMath.java,v 1.45 2007/08/26 08:44:20 irrisor Exp $
|
||||||
*/
|
*/
|
||||||
final public class FastMath {
|
final public class FastMath {
|
||||||
|
|
||||||
private FastMath() {
|
private FastMath() {
|
||||||
}
|
}
|
||||||
/** A "close to zero" double epsilon value for use*/
|
/**
|
||||||
|
* A "close to zero" double epsilon value for use
|
||||||
|
*/
|
||||||
public static final double DBL_EPSILON = 2.220446049250313E-16d;
|
public static final double DBL_EPSILON = 2.220446049250313E-16d;
|
||||||
/** A "close to zero" float epsilon value for use*/
|
/**
|
||||||
|
* A "close to zero" float epsilon value for use
|
||||||
|
*/
|
||||||
public static final float FLT_EPSILON = 1.1920928955078125E-7f;
|
public static final float FLT_EPSILON = 1.1920928955078125E-7f;
|
||||||
/** A "close to zero" float epsilon value for use*/
|
/**
|
||||||
|
* A "close to zero" float epsilon value for use
|
||||||
|
*/
|
||||||
public static final float ZERO_TOLERANCE = 0.0001f;
|
public static final float ZERO_TOLERANCE = 0.0001f;
|
||||||
public static final float ONE_THIRD = 1f / 3f;
|
public static final float ONE_THIRD = 1f / 3f;
|
||||||
/** The value PI as a float. (180 degrees) */
|
/**
|
||||||
|
* The value PI as a float. (180 degrees)
|
||||||
|
*/
|
||||||
public static final float PI = (float) Math.PI;
|
public static final float PI = (float) Math.PI;
|
||||||
/** The value 2PI as a float. (360 degrees) */
|
/**
|
||||||
|
* The value 2PI as a float. (360 degrees)
|
||||||
|
*/
|
||||||
public static final float TWO_PI = 2.0f * PI;
|
public static final float TWO_PI = 2.0f * PI;
|
||||||
/** The value PI/2 as a float. (90 degrees) */
|
/**
|
||||||
|
* The value PI/2 as a float. (90 degrees)
|
||||||
|
*/
|
||||||
public static final float HALF_PI = 0.5f * PI;
|
public static final float HALF_PI = 0.5f * PI;
|
||||||
/** The value PI/4 as a float. (45 degrees) */
|
/**
|
||||||
|
* The value PI/4 as a float. (45 degrees)
|
||||||
|
*/
|
||||||
public static final float QUARTER_PI = 0.25f * PI;
|
public static final float QUARTER_PI = 0.25f * PI;
|
||||||
/** The value 1/PI as a float. */
|
/**
|
||||||
|
* The value 1/PI as a float.
|
||||||
|
*/
|
||||||
public static final float INV_PI = 1.0f / PI;
|
public static final float INV_PI = 1.0f / PI;
|
||||||
/** The value 1/(2PI) as a float. */
|
/**
|
||||||
|
* The value 1/(2PI) as a float.
|
||||||
|
*/
|
||||||
public static final float INV_TWO_PI = 1.0f / TWO_PI;
|
public static final float INV_TWO_PI = 1.0f / TWO_PI;
|
||||||
/** A value to multiply a degree value by, to convert it to radians. */
|
/**
|
||||||
|
* A value to multiply a degree value by, to convert it to radians.
|
||||||
|
*/
|
||||||
public static final float DEG_TO_RAD = PI / 180.0f;
|
public static final float DEG_TO_RAD = PI / 180.0f;
|
||||||
/** A value to multiply a radian value by, to convert it to degrees. */
|
/**
|
||||||
|
* A value to multiply a radian value by, to convert it to degrees.
|
||||||
|
*/
|
||||||
public static final float RAD_TO_DEG = 180.0f / PI;
|
public static final float RAD_TO_DEG = 180.0f / PI;
|
||||||
/** A precreated random object for random numbers. */
|
/**
|
||||||
|
* A precreated random object for random numbers.
|
||||||
|
*/
|
||||||
public static final Random rand = new Random(System.currentTimeMillis());
|
public static final Random rand = new Random(System.currentTimeMillis());
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -146,7 +169,8 @@ final public class FastMath {
|
|||||||
* @param store a vector3f to store the result
|
* @param store a vector3f to store the result
|
||||||
* @return The interpolated value between startValue and endValue.
|
* @return The interpolated value between startValue and endValue.
|
||||||
*/
|
*/
|
||||||
public static Vector3f interpolateLinear(float scale, Vector3f startValue, Vector3f endValue, Vector3f store) {
|
public static Vector3f interpolateLinear(float scale, Vector3f startValue,
|
||||||
|
Vector3f endValue, Vector3f store) {
|
||||||
if (store == null) {
|
if (store == null) {
|
||||||
store = new Vector3f();
|
store = new Vector3f();
|
||||||
}
|
}
|
||||||
@ -177,6 +201,7 @@ final public class FastMath {
|
|||||||
* if scale is between 0 and 1 this method returns the same result as interpolateLinear
|
* if scale is between 0 and 1 this method returns the same result as interpolateLinear
|
||||||
* if the scale is over 1 the value is linearly extrapolated.
|
* if the scale is over 1 the value is linearly extrapolated.
|
||||||
* Note that the end value is the value for a scale of 1.
|
* Note that the end value is the value for a scale of 1.
|
||||||
|
*
|
||||||
* @param scale the scale for extrapolation
|
* @param scale the scale for extrapolation
|
||||||
* @param startValue the starting value (scale = 0)
|
* @param startValue the starting value (scale = 0)
|
||||||
* @param endValue the end value (scale = 1)
|
* @param endValue the end value (scale = 1)
|
||||||
@ -194,13 +219,15 @@ final public class FastMath {
|
|||||||
* if scale is between 0 and 1 this method returns the same result as interpolateLinear
|
* if scale is between 0 and 1 this method returns the same result as interpolateLinear
|
||||||
* if the scale is over 1 the value is linearly extrapolated.
|
* if the scale is over 1 the value is linearly extrapolated.
|
||||||
* Note that the end value is the value for a scale of 1.
|
* Note that the end value is the value for a scale of 1.
|
||||||
|
*
|
||||||
* @param scale the scale for extrapolation
|
* @param scale the scale for extrapolation
|
||||||
* @param startValue the starting value (scale = 0)
|
* @param startValue the starting value (scale = 0)
|
||||||
* @param endValue the end value (scale = 1)
|
* @param endValue the end value (scale = 1)
|
||||||
* @param store an initialized vector to store the return value
|
* @param store an initialized vector to store the return value
|
||||||
* @return an extrapolation for the given parameters
|
* @return an extrapolation for the given parameters
|
||||||
*/
|
*/
|
||||||
public static Vector3f extrapolateLinear(float scale, Vector3f startValue, Vector3f endValue, Vector3f store) {
|
public static Vector3f extrapolateLinear(float scale, Vector3f startValue,
|
||||||
|
Vector3f endValue, Vector3f store) {
|
||||||
if (store == null) {
|
if (store == null) {
|
||||||
store = new Vector3f();
|
store = new Vector3f();
|
||||||
}
|
}
|
||||||
@ -218,6 +245,7 @@ final public class FastMath {
|
|||||||
* if scale is between 0 and 1 this method returns the same result as interpolateLinear
|
* if scale is between 0 and 1 this method returns the same result as interpolateLinear
|
||||||
* if the scale is over 1 the value is linearly extrapolated.
|
* if the scale is over 1 the value is linearly extrapolated.
|
||||||
* Note that the end value is the value for a scale of 1.
|
* Note that the end value is the value for a scale of 1.
|
||||||
|
*
|
||||||
* @param scale the scale for extrapolation
|
* @param scale the scale for extrapolation
|
||||||
* @param startValue the starting value (scale = 0)
|
* @param startValue the starting value (scale = 0)
|
||||||
* @param endValue the end value (scale = 1)
|
* @param endValue the end value (scale = 1)
|
||||||
@ -227,7 +255,8 @@ final public class FastMath {
|
|||||||
return extrapolateLinear(scale, startValue, endValue, null);
|
return extrapolateLinear(scale, startValue, endValue, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**Interpolate a spline between at least 4 control points following the Catmull-Rom equation.
|
/**
|
||||||
|
* Interpolate a spline between at least 4 control points following the Catmull-Rom equation.
|
||||||
* here is the interpolation matrix
|
* here is the interpolation matrix
|
||||||
* m = [ 0.0 1.0 0.0 0.0 ]
|
* m = [ 0.0 1.0 0.0 0.0 ]
|
||||||
* [-T 0.0 T 0.0 ]
|
* [-T 0.0 T 0.0 ]
|
||||||
@ -253,7 +282,8 @@ final public class FastMath {
|
|||||||
return ((c4 * u + c3) * u + c2) * u + c1;
|
return ((c4 * u + c3) * u + c2) * u + c1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**Interpolate a spline between at least 4 control points following the Catmull-Rom equation.
|
/**
|
||||||
|
* Interpolate a spline between at least 4 control points following the Catmull-Rom equation.
|
||||||
* here is the interpolation matrix
|
* here is the interpolation matrix
|
||||||
* m = [ 0.0 1.0 0.0 0.0 ]
|
* m = [ 0.0 1.0 0.0 0.0 ]
|
||||||
* [-T 0.0 T 0.0 ]
|
* [-T 0.0 T 0.0 ]
|
||||||
@ -270,7 +300,8 @@ final public class FastMath {
|
|||||||
* @param store a Vector3f to store the result
|
* @param store a Vector3f to store the result
|
||||||
* @return Catmull–Rom interpolation
|
* @return Catmull–Rom interpolation
|
||||||
*/
|
*/
|
||||||
public static Vector3f interpolateCatmullRom(float u, float T, Vector3f p0, Vector3f p1, Vector3f p2, Vector3f p3, Vector3f store) {
|
public static Vector3f interpolateCatmullRom(float u, float T, Vector3f p0,
|
||||||
|
Vector3f p1, Vector3f p2, Vector3f p3, Vector3f store) {
|
||||||
if (store == null) {
|
if (store == null) {
|
||||||
store = new Vector3f();
|
store = new Vector3f();
|
||||||
}
|
}
|
||||||
@ -297,7 +328,8 @@ final public class FastMath {
|
|||||||
* @param p3 control point 3
|
* @param p3 control point 3
|
||||||
* @return Catmull–Rom interpolation
|
* @return Catmull–Rom interpolation
|
||||||
*/
|
*/
|
||||||
public static Vector3f interpolateCatmullRom(float u, float T, Vector3f p0, Vector3f p1, Vector3f p2, Vector3f p3) {
|
public static Vector3f interpolateCatmullRom(float u, float T, Vector3f p0,
|
||||||
|
Vector3f p1, Vector3f p2, Vector3f p3) {
|
||||||
return interpolateCatmullRom(u, T, p0, p1, p2, p3, null);
|
return interpolateCatmullRom(u, T, p0, p1, p2, p3, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -326,7 +358,8 @@ final public class FastMath {
|
|||||||
+ p3 * u2 * u;
|
+ p3 * u2 * u;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**Interpolate a spline between at least 4 control points following the Bezier equation.
|
/**
|
||||||
|
* Interpolate a spline between at least 4 control points following the Bezier equation.
|
||||||
* here is the interpolation matrix
|
* here is the interpolation matrix
|
||||||
* m = [ -1.0 3.0 -3.0 1.0 ]
|
* m = [ -1.0 3.0 -3.0 1.0 ]
|
||||||
* [ 3.0 -6.0 3.0 0.0 ]
|
* [ 3.0 -6.0 3.0 0.0 ]
|
||||||
@ -342,7 +375,8 @@ final public class FastMath {
|
|||||||
* @param store a Vector3f to store the result
|
* @param store a Vector3f to store the result
|
||||||
* @return Bezier interpolation
|
* @return Bezier interpolation
|
||||||
*/
|
*/
|
||||||
public static Vector3f interpolateBezier(float u, Vector3f p0, Vector3f p1, Vector3f p2, Vector3f p3, Vector3f store) {
|
public static Vector3f interpolateBezier(float u, Vector3f p0, Vector3f p1,
|
||||||
|
Vector3f p2, Vector3f p3, Vector3f store) {
|
||||||
if (store == null) {
|
if (store == null) {
|
||||||
store = new Vector3f();
|
store = new Vector3f();
|
||||||
}
|
}
|
||||||
@ -352,7 +386,8 @@ final public class FastMath {
|
|||||||
return store;
|
return store;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**Interpolate a spline between at least 4 control points following the Bezier equation.
|
/**
|
||||||
|
* Interpolate a spline between at least 4 control points following the Bezier equation.
|
||||||
* here is the interpolation matrix
|
* here is the interpolation matrix
|
||||||
* m = [ -1.0 3.0 -3.0 1.0 ]
|
* m = [ -1.0 3.0 -3.0 1.0 ]
|
||||||
* [ 3.0 -6.0 3.0 0.0 ]
|
* [ 3.0 -6.0 3.0 0.0 ]
|
||||||
@ -373,6 +408,7 @@ final public class FastMath {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Compute the length of a Catmull–Rom spline between control points 1 and 2
|
* Compute the length of a Catmull–Rom spline between control points 1 and 2
|
||||||
|
*
|
||||||
* @param p0 control point 0
|
* @param p0 control point 0
|
||||||
* @param p1 control point 1
|
* @param p1 control point 1
|
||||||
* @param p2 control point 2
|
* @param p2 control point 2
|
||||||
@ -382,7 +418,8 @@ final public class FastMath {
|
|||||||
* @param curveTension the curve tension
|
* @param curveTension the curve tension
|
||||||
* @return the length of the segment
|
* @return the length of the segment
|
||||||
*/
|
*/
|
||||||
public static float getCatmullRomP1toP2Length(Vector3f p0, Vector3f p1, Vector3f p2, Vector3f p3, float startRange, float endRange, float curveTension) {
|
public static float getCatmullRomP1toP2Length(Vector3f p0, Vector3f p1,
|
||||||
|
Vector3f p2, Vector3f p3, float startRange, float endRange, float curveTension) {
|
||||||
|
|
||||||
float epsilon = 0.001f;
|
float epsilon = 0.001f;
|
||||||
float middleValue = (startRange + endRange) * 0.5f;
|
float middleValue = (startRange + endRange) * 0.5f;
|
||||||
@ -409,6 +446,7 @@ final public class FastMath {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Compute the length on a Bezier spline between control points 1 and 2.
|
* Compute the length on a Bezier spline between control points 1 and 2.
|
||||||
|
*
|
||||||
* @param p0 control point 0
|
* @param p0 control point 0
|
||||||
* @param p1 control point 1
|
* @param p1 control point 1
|
||||||
* @param p2 control point 2
|
* @param p2 control point 2
|
||||||
@ -432,6 +470,7 @@ final public class FastMath {
|
|||||||
* Special cases:
|
* Special cases:
|
||||||
* <ul><li>If fValue is smaller than -1, then the result is PI.
|
* <ul><li>If fValue is smaller than -1, then the result is PI.
|
||||||
* <li>If the argument is greater than 1, then the result is 0.</ul>
|
* <li>If the argument is greater than 1, then the result is 0.</ul>
|
||||||
|
*
|
||||||
* @param fValue The value to arc cosine.
|
* @param fValue The value to arc cosine.
|
||||||
* @return The angle, in radians.
|
* @return The angle, in radians.
|
||||||
* @see java.lang.Math#acos(double)
|
* @see java.lang.Math#acos(double)
|
||||||
@ -453,6 +492,7 @@ final public class FastMath {
|
|||||||
* Special cases:
|
* Special cases:
|
||||||
* <ul><li>If fValue is smaller than -1, then the result is -HALF_PI.
|
* <ul><li>If fValue is smaller than -1, then the result is -HALF_PI.
|
||||||
* <li>If the argument is greater than 1, then the result is HALF_PI.</ul>
|
* <li>If the argument is greater than 1, then the result is HALF_PI.</ul>
|
||||||
|
*
|
||||||
* @param fValue The value to arc sine.
|
* @param fValue The value to arc sine.
|
||||||
* @return the angle in radians.
|
* @return the angle in radians.
|
||||||
* @see java.lang.Math#asin(double)
|
* @see java.lang.Math#asin(double)
|
||||||
@ -471,6 +511,7 @@ final public class FastMath {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the arc tangent of an angle given in radians.<br>
|
* Returns the arc tangent of an angle given in radians.<br>
|
||||||
|
*
|
||||||
* @param fValue The angle, in radians.
|
* @param fValue The angle, in radians.
|
||||||
* @return fValue's atan
|
* @return fValue's atan
|
||||||
* @see java.lang.Math#atan(double)
|
* @see java.lang.Math#atan(double)
|
||||||
@ -481,6 +522,7 @@ final public class FastMath {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* A direct call to Math.atan2.
|
* A direct call to Math.atan2.
|
||||||
|
*
|
||||||
* @param fY
|
* @param fY
|
||||||
* @param fX
|
* @param fX
|
||||||
* @return Math.atan2(fY,fX)
|
* @return Math.atan2(fY,fX)
|
||||||
@ -492,6 +534,7 @@ final public class FastMath {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Rounds a fValue up. A call to Math.ceil
|
* Rounds a fValue up. A call to Math.ceil
|
||||||
|
*
|
||||||
* @param fValue The value.
|
* @param fValue The value.
|
||||||
* @return The fValue rounded up
|
* @return The fValue rounded up
|
||||||
* @see java.lang.Math#ceil(double)
|
* @see java.lang.Math#ceil(double)
|
||||||
@ -502,6 +545,7 @@ final public class FastMath {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns cosine of an angle. Direct call to java.lang.Math
|
* Returns cosine of an angle. Direct call to java.lang.Math
|
||||||
|
*
|
||||||
* @see Math#cos(double)
|
* @see Math#cos(double)
|
||||||
* @param v The angle to cosine.
|
* @param v The angle to cosine.
|
||||||
* @return the cosine of the angle.
|
* @return the cosine of the angle.
|
||||||
@ -512,6 +556,7 @@ final public class FastMath {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the sine of an angle. Direct call to java.lang.Math
|
* Returns the sine of an angle. Direct call to java.lang.Math
|
||||||
|
*
|
||||||
* @see Math#sin(double)
|
* @see Math#sin(double)
|
||||||
* @param v The angle to sine.
|
* @param v The angle to sine.
|
||||||
* @return the sine of the angle.
|
* @return the sine of the angle.
|
||||||
@ -522,6 +567,7 @@ final public class FastMath {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns E^fValue
|
* Returns E^fValue
|
||||||
|
*
|
||||||
* @param fValue Value to raise to a power.
|
* @param fValue Value to raise to a power.
|
||||||
* @return The value E^fValue
|
* @return The value E^fValue
|
||||||
* @see java.lang.Math#exp(double)
|
* @see java.lang.Math#exp(double)
|
||||||
@ -532,6 +578,7 @@ final public class FastMath {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns Absolute value of a float.
|
* Returns Absolute value of a float.
|
||||||
|
*
|
||||||
* @param fValue The value to abs.
|
* @param fValue The value to abs.
|
||||||
* @return The abs of the value.
|
* @return The abs of the value.
|
||||||
* @see java.lang.Math#abs(float)
|
* @see java.lang.Math#abs(float)
|
||||||
@ -545,6 +592,7 @@ final public class FastMath {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a number rounded down.
|
* Returns a number rounded down.
|
||||||
|
*
|
||||||
* @param fValue The value to round
|
* @param fValue The value to round
|
||||||
* @return The given number rounded down
|
* @return The given number rounded down
|
||||||
* @see java.lang.Math#floor(double)
|
* @see java.lang.Math#floor(double)
|
||||||
@ -555,6 +603,7 @@ final public class FastMath {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns 1/sqrt(fValue)
|
* Returns 1/sqrt(fValue)
|
||||||
|
*
|
||||||
* @param fValue The value to process.
|
* @param fValue The value to process.
|
||||||
* @return 1/sqrt(fValue)
|
* @return 1/sqrt(fValue)
|
||||||
* @see java.lang.Math#sqrt(double)
|
* @see java.lang.Math#sqrt(double)
|
||||||
@ -574,6 +623,7 @@ final public class FastMath {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the log base E of a value.
|
* Returns the log base E of a value.
|
||||||
|
*
|
||||||
* @param fValue The value to log.
|
* @param fValue The value to log.
|
||||||
* @return The log of fValue base E
|
* @return The log of fValue base E
|
||||||
* @see java.lang.Math#log(double)
|
* @see java.lang.Math#log(double)
|
||||||
@ -585,6 +635,7 @@ final public class FastMath {
|
|||||||
/**
|
/**
|
||||||
* Returns the logarithm of value with given base, calculated as log(value)/log(base),
|
* Returns the logarithm of value with given base, calculated as log(value)/log(base),
|
||||||
* so that pow(base, return)==value (contributed by vear)
|
* so that pow(base, return)==value (contributed by vear)
|
||||||
|
*
|
||||||
* @param value The value to log.
|
* @param value The value to log.
|
||||||
* @param base Base of logarithm.
|
* @param base Base of logarithm.
|
||||||
* @return The logarithm of value with given base
|
* @return The logarithm of value with given base
|
||||||
@ -595,6 +646,7 @@ final public class FastMath {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a number raised to an exponent power. fBase^fExponent
|
* Returns a number raised to an exponent power. fBase^fExponent
|
||||||
|
*
|
||||||
* @param fBase The base value (IE 2)
|
* @param fBase The base value (IE 2)
|
||||||
* @param fExponent The exponent value (IE 3)
|
* @param fExponent The exponent value (IE 3)
|
||||||
* @return base raised to exponent (IE 8)
|
* @return base raised to exponent (IE 8)
|
||||||
@ -606,6 +658,7 @@ final public class FastMath {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the value squared. fValue ^ 2
|
* Returns the value squared. fValue ^ 2
|
||||||
|
*
|
||||||
* @param fValue The value to square.
|
* @param fValue The value to square.
|
||||||
* @return The square of the given value.
|
* @return The square of the given value.
|
||||||
*/
|
*/
|
||||||
@ -615,6 +668,7 @@ final public class FastMath {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the square root of a given value.
|
* Returns the square root of a given value.
|
||||||
|
*
|
||||||
* @param fValue The value to sqrt.
|
* @param fValue The value to sqrt.
|
||||||
* @return The square root of the given value.
|
* @return The square root of the given value.
|
||||||
* @see java.lang.Math#sqrt(double)
|
* @see java.lang.Math#sqrt(double)
|
||||||
@ -626,6 +680,7 @@ final public class FastMath {
|
|||||||
/**
|
/**
|
||||||
* Returns the tangent of a value. If USE_FAST_TRIG is enabled, an approximate value
|
* Returns the tangent of a value. If USE_FAST_TRIG is enabled, an approximate value
|
||||||
* is returned. Otherwise, a direct value is used.
|
* is returned. Otherwise, a direct value is used.
|
||||||
|
*
|
||||||
* @param fValue The value to tangent, in radians.
|
* @param fValue The value to tangent, in radians.
|
||||||
* @return The tangent of fValue.
|
* @return The tangent of fValue.
|
||||||
* @see java.lang.Math#tan(double)
|
* @see java.lang.Math#tan(double)
|
||||||
@ -636,6 +691,7 @@ final public class FastMath {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns 1 if the number is positive, -1 if the number is negative, and 0 otherwise
|
* Returns 1 if the number is positive, -1 if the number is negative, and 0 otherwise
|
||||||
|
*
|
||||||
* @param iValue The integer to examine.
|
* @param iValue The integer to examine.
|
||||||
* @return The integer's sign.
|
* @return The integer's sign.
|
||||||
*/
|
*/
|
||||||
@ -651,6 +707,7 @@ final public class FastMath {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns 1 if the number is positive, -1 if the number is negative, and 0 otherwise
|
* Returns 1 if the number is positive, -1 if the number is negative, and 0 otherwise
|
||||||
|
*
|
||||||
* @param fValue The float to examine.
|
* @param fValue The float to examine.
|
||||||
* @return The float's sign.
|
* @return The float's sign.
|
||||||
*/
|
*/
|
||||||
@ -661,6 +718,7 @@ final public class FastMath {
|
|||||||
/**
|
/**
|
||||||
* Given 3 points in a 2d plane, this function computes if the points going from A-B-C
|
* Given 3 points in a 2d plane, this function computes if the points going from A-B-C
|
||||||
* are moving counter clock wise.
|
* are moving counter clock wise.
|
||||||
|
*
|
||||||
* @param p0 Point 0.
|
* @param p0 Point 0.
|
||||||
* @param p1 Point 1.
|
* @param p1 Point 1.
|
||||||
* @param p2 Point 2.
|
* @param p2 Point 2.
|
||||||
@ -690,6 +748,7 @@ final public class FastMath {
|
|||||||
/**
|
/**
|
||||||
* Test if a point is inside a triangle. 1 if the point is on the ccw side,
|
* Test if a point is inside a triangle. 1 if the point is on the ccw side,
|
||||||
* -1 if the point is on the cw side, and 0 if it is on neither.
|
* -1 if the point is on the cw side, and 0 if it is on neither.
|
||||||
|
*
|
||||||
* @param t0 First point of the triangle.
|
* @param t0 First point of the triangle.
|
||||||
* @param t1 Second point of the triangle.
|
* @param t1 Second point of the triangle.
|
||||||
* @param t2 Third point of the triangle.
|
* @param t2 Third point of the triangle.
|
||||||
@ -720,6 +779,7 @@ final public class FastMath {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* A method that computes normal for a triangle defined by three vertices.
|
* A method that computes normal for a triangle defined by three vertices.
|
||||||
|
*
|
||||||
* @param v1 first vertex
|
* @param v1 first vertex
|
||||||
* @param v2 second vertex
|
* @param v2 second vertex
|
||||||
* @param v3 third vertex
|
* @param v3 third vertex
|
||||||
@ -996,6 +1056,7 @@ final public class FastMath {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts a range of min/max to a 0-1 range.
|
* Converts a range of min/max to a 0-1 range.
|
||||||
|
*
|
||||||
* @param value the value between min-max (inclusive).
|
* @param value the value between min-max (inclusive).
|
||||||
* @param min the minimum of the range.
|
* @param min the minimum of the range.
|
||||||
* @param max the maximum of the range.
|
* @param max the maximum of the range.
|
||||||
@ -1004,5 +1065,4 @@ final public class FastMath {
|
|||||||
public static float unInterpolateLinear(float value, float min, float max) {
|
public static float unInterpolateLinear(float value, float min, float max) {
|
||||||
return (value - min) / (max - min);
|
return (value - min) / (max - min);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -61,7 +61,6 @@ public final class Matrix3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
/**
|
/**
|
||||||
* Constructor instantiates a new <code>Matrix3f</code> object. The
|
* Constructor instantiates a new <code>Matrix3f</code> object. The
|
||||||
* initial values for the matrix is that of the identity matrix.
|
* initial values for the matrix is that of the identity matrix.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public Matrix3f() {
|
public Matrix3f() {
|
||||||
loadIdentity();
|
loadIdentity();
|
||||||
@ -70,24 +69,15 @@ public final class Matrix3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
/**
|
/**
|
||||||
* constructs a matrix with the given values.
|
* constructs a matrix with the given values.
|
||||||
*
|
*
|
||||||
* @param m00
|
* @param m00 0x0 in the matrix.
|
||||||
* 0x0 in the matrix.
|
* @param m01 0x1 in the matrix.
|
||||||
* @param m01
|
* @param m02 0x2 in the matrix.
|
||||||
* 0x1 in the matrix.
|
* @param m10 1x0 in the matrix.
|
||||||
* @param m02
|
* @param m11 1x1 in the matrix.
|
||||||
* 0x2 in the matrix.
|
* @param m12 1x2 in the matrix.
|
||||||
* @param m10
|
* @param m20 2x0 in the matrix.
|
||||||
* 1x0 in the matrix.
|
* @param m21 2x1 in the matrix.
|
||||||
* @param m11
|
* @param m22 2x2 in the matrix.
|
||||||
* 1x1 in the matrix.
|
|
||||||
* @param m12
|
|
||||||
* 1x2 in the matrix.
|
|
||||||
* @param m20
|
|
||||||
* 2x0 in the matrix.
|
|
||||||
* @param m21
|
|
||||||
* 2x1 in the matrix.
|
|
||||||
* @param m22
|
|
||||||
* 2x2 in the matrix.
|
|
||||||
*/
|
*/
|
||||||
public Matrix3f(float m00, float m01, float m02, float m10, float m11,
|
public Matrix3f(float m00, float m01, float m02, float m10, float m11,
|
||||||
float m12, float m20, float m21, float m22) {
|
float m12, float m20, float m21, float m22) {
|
||||||
@ -160,10 +150,8 @@ public final class Matrix3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
* position. If the position is invalid a <code>JmeException</code> is
|
* position. If the position is invalid a <code>JmeException</code> is
|
||||||
* thrown.
|
* thrown.
|
||||||
*
|
*
|
||||||
* @param i
|
* @param i the row index.
|
||||||
* the row index.
|
* @param j the colum index.
|
||||||
* @param j
|
|
||||||
* the colum index.
|
|
||||||
* @return the value at (i, j).
|
* @return the value at (i, j).
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("fallthrough")
|
@SuppressWarnings("fallthrough")
|
||||||
@ -303,6 +291,7 @@ public final class Matrix3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Normalize this matrix
|
* Normalize this matrix
|
||||||
|
*
|
||||||
* @return this matrix once normalized.
|
* @return this matrix once normalized.
|
||||||
*/
|
*/
|
||||||
public Matrix3f normalizeLocal() {
|
public Matrix3f normalizeLocal() {
|
||||||
@ -448,7 +437,6 @@ public final class Matrix3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
|
|
||||||
TempVars vars = TempVars.get();
|
TempVars vars = TempVars.get();
|
||||||
|
|
||||||
|
|
||||||
fillFloatArray(vars.matrixWrite, columnMajor);
|
fillFloatArray(vars.matrixWrite, columnMajor);
|
||||||
fb.put(vars.matrixWrite, 0, 9);
|
fb.put(vars.matrixWrite, 0, 9);
|
||||||
|
|
||||||
@ -482,7 +470,6 @@ public final class Matrix3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* <code>setColumn</code> sets a particular column of this matrix to that
|
* <code>setColumn</code> sets a particular column of this matrix to that
|
||||||
* represented by the provided vector.
|
* represented by the provided vector.
|
||||||
*
|
*
|
||||||
@ -522,7 +509,6 @@ public final class Matrix3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* <code>setRow</code> sets a particular row of this matrix to that
|
* <code>setRow</code> sets a particular row of this matrix to that
|
||||||
* represented by the provided vector.
|
* represented by the provided vector.
|
||||||
*
|
*
|
||||||
@ -620,7 +606,6 @@ public final class Matrix3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* <code>set</code> sets the values of the matrix to those supplied by the
|
* <code>set</code> sets the values of the matrix to those supplied by the
|
||||||
* 3x3 two dimenion array.
|
* 3x3 two dimenion array.
|
||||||
*
|
*
|
||||||
@ -652,12 +637,9 @@ public final class Matrix3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
/**
|
/**
|
||||||
* Recreate Matrix using the provided axis.
|
* Recreate Matrix using the provided axis.
|
||||||
*
|
*
|
||||||
* @param uAxis
|
* @param uAxis Vector3f
|
||||||
* Vector3f
|
* @param vAxis Vector3f
|
||||||
* @param vAxis
|
* @param wAxis Vector3f
|
||||||
* Vector3f
|
|
||||||
* @param wAxis
|
|
||||||
* Vector3f
|
|
||||||
*/
|
*/
|
||||||
public void fromAxes(Vector3f uAxis, Vector3f vAxis, Vector3f wAxis) {
|
public void fromAxes(Vector3f uAxis, Vector3f vAxis, Vector3f wAxis) {
|
||||||
m00 = uAxis.x;
|
m00 = uAxis.x;
|
||||||
@ -726,7 +708,6 @@ public final class Matrix3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* <code>set</code> defines the values of the matrix based on a supplied
|
* <code>set</code> defines the values of the matrix based on a supplied
|
||||||
* <code>Quaternion</code>. It should be noted that all previous values
|
* <code>Quaternion</code>. It should be noted that all previous values
|
||||||
* will be overridden.
|
* will be overridden.
|
||||||
@ -742,7 +723,6 @@ public final class Matrix3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
/**
|
/**
|
||||||
* <code>loadIdentity</code> sets this matrix to the identity matrix.
|
* <code>loadIdentity</code> sets this matrix to the identity matrix.
|
||||||
* Where all values are zero except those along the diagonal which are one.
|
* Where all values are zero except those along the diagonal which are one.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public void loadIdentity() {
|
public void loadIdentity() {
|
||||||
m01 = m02 = m10 = m12 = m20 = m21 = 0;
|
m01 = m02 = m10 = m12 = m20 = m21 = 0;
|
||||||
@ -1175,7 +1155,6 @@ public final class Matrix3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* <code>hashCode</code> returns the hash code value as an integer and is
|
* <code>hashCode</code> returns the hash code value as an integer and is
|
||||||
* supported for the benefit of hashing based collection classes such as
|
* supported for the benefit of hashing based collection classes such as
|
||||||
* Hashtable, HashMap, HashSet etc.
|
* Hashtable, HashMap, HashSet etc.
|
||||||
|
@ -69,7 +69,6 @@ public final class Matrix4f implements Savable, Cloneable, java.io.Serializable
|
|||||||
/**
|
/**
|
||||||
* Constructor instantiates a new <code>Matrix</code> that is set to the
|
* Constructor instantiates a new <code>Matrix</code> that is set to the
|
||||||
* identity matrix.
|
* identity matrix.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public Matrix4f() {
|
public Matrix4f() {
|
||||||
loadIdentity();
|
loadIdentity();
|
||||||
@ -253,10 +252,8 @@ public final class Matrix4f implements Savable, Cloneable, java.io.Serializable
|
|||||||
* position. If the position is invalid a <code>JmeException</code> is
|
* position. If the position is invalid a <code>JmeException</code> is
|
||||||
* thrown.
|
* thrown.
|
||||||
*
|
*
|
||||||
* @param i
|
* @param i the row index.
|
||||||
* the row index.
|
* @param j the colum index.
|
||||||
* @param j
|
|
||||||
* the colum index.
|
|
||||||
* @return the value at (i, j).
|
* @return the value at (i, j).
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("fallthrough")
|
@SuppressWarnings("fallthrough")
|
||||||
@ -316,8 +313,7 @@ public final class Matrix4f implements Savable, Cloneable, java.io.Serializable
|
|||||||
* <code>getColumn</code> returns one of three columns specified by the
|
* <code>getColumn</code> returns one of three columns specified by the
|
||||||
* parameter. This column is returned as a float array of length 4.
|
* parameter. This column is returned as a float array of length 4.
|
||||||
*
|
*
|
||||||
* @param i
|
* @param i the column to retrieve. Must be between 0 and 3.
|
||||||
* the column to retrieve. Must be between 0 and 3.
|
|
||||||
* @return the column specified by the index.
|
* @return the column specified by the index.
|
||||||
*/
|
*/
|
||||||
public float[] getColumn(int i) {
|
public float[] getColumn(int i) {
|
||||||
@ -328,8 +324,7 @@ public final class Matrix4f implements Savable, Cloneable, java.io.Serializable
|
|||||||
* <code>getColumn</code> returns one of three columns specified by the
|
* <code>getColumn</code> returns one of three columns specified by the
|
||||||
* parameter. This column is returned as a float[4].
|
* parameter. This column is returned as a float[4].
|
||||||
*
|
*
|
||||||
* @param i
|
* @param i the column to retrieve. Must be between 0 and 3.
|
||||||
* the column to retrieve. Must be between 0 and 3.
|
|
||||||
* @param store
|
* @param store
|
||||||
* the float array to store the result in. if null, a new one
|
* the float array to store the result in. if null, a new one
|
||||||
* is created.
|
* is created.
|
||||||
@ -372,12 +367,10 @@ public final class Matrix4f implements Savable, Cloneable, java.io.Serializable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* <code>setColumn</code> sets a particular column of this matrix to that
|
* <code>setColumn</code> sets a particular column of this matrix to that
|
||||||
* represented by the provided vector.
|
* represented by the provided vector.
|
||||||
*
|
*
|
||||||
* @param i
|
* @param i the column to set.
|
||||||
* the column to set.
|
|
||||||
* @param column
|
* @param column
|
||||||
* the data to set.
|
* the data to set.
|
||||||
*/
|
*/
|
||||||
@ -423,10 +416,8 @@ public final class Matrix4f implements Savable, Cloneable, java.io.Serializable
|
|||||||
* position. If the position is invalid a <code>JmeException</code> is
|
* position. If the position is invalid a <code>JmeException</code> is
|
||||||
* thrown.
|
* thrown.
|
||||||
*
|
*
|
||||||
* @param i
|
* @param i the row index.
|
||||||
* the row index.
|
* @param j the colum index.
|
||||||
* @param j
|
|
||||||
* the colum index.
|
|
||||||
* @param value
|
* @param value
|
||||||
* the value for (i, j).
|
* the value for (i, j).
|
||||||
*/
|
*/
|
||||||
@ -532,7 +523,6 @@ public final class Matrix4f implements Savable, Cloneable, java.io.Serializable
|
|||||||
m33 = matrix[3][3];
|
m33 = matrix[3][3];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the values of this matrix
|
* Sets the values of this matrix
|
||||||
*/
|
*/
|
||||||
@ -718,6 +708,7 @@ public final class Matrix4f implements Savable, Cloneable, java.io.Serializable
|
|||||||
/**
|
/**
|
||||||
* <code>fillFloatBuffer</code> fills a FloatBuffer object with
|
* <code>fillFloatBuffer</code> fills a FloatBuffer object with
|
||||||
* the matrix data.
|
* the matrix data.
|
||||||
|
*
|
||||||
* @param fb the buffer to fill, must be correct size
|
* @param fb the buffer to fill, must be correct size
|
||||||
* @return matrix data as a FloatBuffer.
|
* @return matrix data as a FloatBuffer.
|
||||||
*/
|
*/
|
||||||
@ -753,7 +744,6 @@ public final class Matrix4f implements Savable, Cloneable, java.io.Serializable
|
|||||||
|
|
||||||
TempVars vars = TempVars.get();
|
TempVars vars = TempVars.get();
|
||||||
|
|
||||||
|
|
||||||
fillFloatArray(vars.matrixWrite, columnMajor);
|
fillFloatArray(vars.matrixWrite, columnMajor);
|
||||||
fb.put(vars.matrixWrite, 0, 16);
|
fb.put(vars.matrixWrite, 0, 16);
|
||||||
|
|
||||||
@ -802,6 +792,7 @@ public final class Matrix4f implements Savable, Cloneable, java.io.Serializable
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* <code>readFloatBuffer</code> reads value for this matrix from a FloatBuffer.
|
* <code>readFloatBuffer</code> reads value for this matrix from a FloatBuffer.
|
||||||
|
*
|
||||||
* @param fb the buffer to read from, must be correct size
|
* @param fb the buffer to read from, must be correct size
|
||||||
* @return this data as a FloatBuffer.
|
* @return this data as a FloatBuffer.
|
||||||
*/
|
*/
|
||||||
@ -811,6 +802,7 @@ public final class Matrix4f implements Savable, Cloneable, java.io.Serializable
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* <code>readFloatBuffer</code> reads value for this matrix from a FloatBuffer.
|
* <code>readFloatBuffer</code> reads value for this matrix from a FloatBuffer.
|
||||||
|
*
|
||||||
* @param fb the buffer to read from, must be correct size
|
* @param fb the buffer to read from, must be correct size
|
||||||
* @param columnMajor if true, this buffer should be filled with column
|
* @param columnMajor if true, this buffer should be filled with column
|
||||||
* major data, otherwise it will be filled row major.
|
* major data, otherwise it will be filled row major.
|
||||||
@ -859,7 +851,6 @@ public final class Matrix4f implements Savable, Cloneable, java.io.Serializable
|
|||||||
/**
|
/**
|
||||||
* <code>loadIdentity</code> sets this matrix to the identity matrix,
|
* <code>loadIdentity</code> sets this matrix to the identity matrix,
|
||||||
* namely all zeros with ones along the diagonal.
|
* namely all zeros with ones along the diagonal.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public void loadIdentity() {
|
public void loadIdentity() {
|
||||||
m01 = m02 = m03 = 0.0f;
|
m01 = m02 = m03 = 0.0f;
|
||||||
@ -869,7 +860,8 @@ public final class Matrix4f implements Savable, Cloneable, java.io.Serializable
|
|||||||
m00 = m11 = m22 = m33 = 1.0f;
|
m00 = m11 = m22 = m33 = 1.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void fromFrustum(float near, float far, float left, float right, float top, float bottom, boolean parallel) {
|
public void fromFrustum(float near, float far, float left, float right,
|
||||||
|
float top, float bottom, boolean parallel) {
|
||||||
loadIdentity();
|
loadIdentity();
|
||||||
if (parallel) {
|
if (parallel) {
|
||||||
// scale
|
// scale
|
||||||
@ -1095,7 +1087,6 @@ public final class Matrix4f implements Savable, Cloneable, java.io.Serializable
|
|||||||
+ m32 * in2.m23
|
+ m32 * in2.m23
|
||||||
+ m33 * in2.m33;
|
+ m33 * in2.m33;
|
||||||
|
|
||||||
|
|
||||||
store.m00 = m[0];
|
store.m00 = m[0];
|
||||||
store.m01 = m[1];
|
store.m01 = m[1];
|
||||||
store.m02 = m[2];
|
store.m02 = m[2];
|
||||||
@ -1211,7 +1202,6 @@ public final class Matrix4f implements Savable, Cloneable, java.io.Serializable
|
|||||||
*
|
*
|
||||||
* @param vec
|
* @param vec
|
||||||
* vec to multiply against.
|
* vec to multiply against.
|
||||||
*
|
|
||||||
* @return the rotated vector.
|
* @return the rotated vector.
|
||||||
*/
|
*/
|
||||||
public Vector4f multAcross(Vector4f vec) {
|
public Vector4f multAcross(Vector4f vec) {
|
||||||
@ -1834,12 +1824,9 @@ public final class Matrix4f implements Savable, Cloneable, java.io.Serializable
|
|||||||
/**
|
/**
|
||||||
* <code>setTranslation</code> will set the matrix's translation values.
|
* <code>setTranslation</code> will set the matrix's translation values.
|
||||||
*
|
*
|
||||||
* @param x
|
* @param x value of the translation on the x axis
|
||||||
* value of the translation on the x axis
|
* @param y value of the translation on the y axis
|
||||||
* @param y
|
* @param z value of the translation on the z axis
|
||||||
* value of the translation on the y axis
|
|
||||||
* @param z
|
|
||||||
* value of the translation on the z axis
|
|
||||||
*/
|
*/
|
||||||
public void setTranslation(float x, float y, float z) {
|
public void setTranslation(float x, float y, float z) {
|
||||||
m03 = x;
|
m03 = x;
|
||||||
@ -1988,7 +1975,6 @@ public final class Matrix4f implements Savable, Cloneable, java.io.Serializable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* <code>inverseTranslateVect</code> translates a given Vector3f by the
|
* <code>inverseTranslateVect</code> translates a given Vector3f by the
|
||||||
* translation part of this matrix.
|
* translation part of this matrix.
|
||||||
*
|
*
|
||||||
@ -2009,7 +1995,6 @@ public final class Matrix4f implements Savable, Cloneable, java.io.Serializable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* <code>inverseTranslateVect</code> translates a given Vector3f by the
|
* <code>inverseTranslateVect</code> translates a given Vector3f by the
|
||||||
* translation part of this matrix.
|
* translation part of this matrix.
|
||||||
*
|
*
|
||||||
@ -2025,7 +2010,6 @@ public final class Matrix4f implements Savable, Cloneable, java.io.Serializable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* <code>inverseTranslateVect</code> translates a given Vector3f by the
|
* <code>inverseTranslateVect</code> translates a given Vector3f by the
|
||||||
* translation part of this matrix.
|
* translation part of this matrix.
|
||||||
*
|
*
|
||||||
@ -2041,7 +2025,6 @@ public final class Matrix4f implements Savable, Cloneable, java.io.Serializable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* <code>inverseRotateVect</code> rotates a given Vector3f by the rotation
|
* <code>inverseRotateVect</code> rotates a given Vector3f by the rotation
|
||||||
* part of this matrix.
|
* part of this matrix.
|
||||||
*
|
*
|
||||||
@ -2118,7 +2101,6 @@ public final class Matrix4f implements Savable, Cloneable, java.io.Serializable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* <code>hashCode</code> returns the hash code value as an integer and is
|
* <code>hashCode</code> returns the hash code value as an integer and is
|
||||||
* supported for the benefit of hashing based collection classes such as
|
* supported for the benefit of hashing based collection classes such as
|
||||||
* Hashtable, HashMap, HashSet etc.
|
* Hashtable, HashMap, HashSet etc.
|
||||||
|
@ -165,8 +165,9 @@ public class Plane implements Savable, Cloneable, java.io.Serializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Vector3f reflect(Vector3f point, Vector3f store) {
|
public Vector3f reflect(Vector3f point, Vector3f store) {
|
||||||
if (store == null)
|
if (store == null) {
|
||||||
store = new Vector3f();
|
store = new Vector3f();
|
||||||
|
}
|
||||||
|
|
||||||
float d = pseudoDistance(point);
|
float d = pseudoDistance(point);
|
||||||
store.set(normal).negateLocal().multLocal(d * 2f);
|
store.set(normal).negateLocal().multLocal(d * 2f);
|
||||||
@ -210,17 +211,17 @@ public class Plane implements Savable, Cloneable, java.io.Serializable {
|
|||||||
|
|
||||||
public boolean isOnPlane(Vector3f point) {
|
public boolean isOnPlane(Vector3f point) {
|
||||||
float dist = pseudoDistance(point);
|
float dist = pseudoDistance(point);
|
||||||
if (dist < FastMath.FLT_EPSILON && dist > -FastMath.FLT_EPSILON)
|
if (dist < FastMath.FLT_EPSILON && dist > -FastMath.FLT_EPSILON) {
|
||||||
return true;
|
return true;
|
||||||
else
|
} else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize this plane using the three points of the given triangle.
|
* Initialize this plane using the three points of the given triangle.
|
||||||
*
|
*
|
||||||
* @param t
|
* @param t the triangle
|
||||||
* the triangle
|
|
||||||
*/
|
*/
|
||||||
public void setPlanePoints(AbstractTriangle t) {
|
public void setPlanePoints(AbstractTriangle t) {
|
||||||
setPlanePoints(t.get1(), t.get2(), t.get3());
|
setPlanePoints(t.get1(), t.get2(), t.get3());
|
||||||
|
@ -43,8 +43,7 @@ import java.util.logging.Logger;
|
|||||||
* rotation in four dimensions. This avoids "gimbal lock" and allows for smooth
|
* rotation in four dimensions. This avoids "gimbal lock" and allows for smooth
|
||||||
* continuous rotation.
|
* continuous rotation.
|
||||||
*
|
*
|
||||||
* <code>Quaternion</code> is defined by four floating point numbers: {x y z
|
* <code>Quaternion</code> is defined by four floating point numbers: {x y z w}.
|
||||||
* w}.
|
|
||||||
*
|
*
|
||||||
* @author Mark Powell
|
* @author Mark Powell
|
||||||
* @author Joshua Slack
|
* @author Joshua Slack
|
||||||
@ -82,14 +81,10 @@ public final class Quaternion implements Savable, Cloneable, java.io.Serializabl
|
|||||||
* Constructor instantiates a new <code>Quaternion</code> object from the
|
* Constructor instantiates a new <code>Quaternion</code> object from the
|
||||||
* given list of parameters.
|
* given list of parameters.
|
||||||
*
|
*
|
||||||
* @param x
|
* @param x the x value of the quaternion.
|
||||||
* the x value of the quaternion.
|
* @param y the y value of the quaternion.
|
||||||
* @param y
|
* @param z the z value of the quaternion.
|
||||||
* the y value of the quaternion.
|
* @param w the w value of the quaternion.
|
||||||
* @param z
|
|
||||||
* the z value of the quaternion.
|
|
||||||
* @param w
|
|
||||||
* the w value of the quaternion.
|
|
||||||
*/
|
*/
|
||||||
public Quaternion(float x, float y, float z, float w) {
|
public Quaternion(float x, float y, float z, float w) {
|
||||||
this.x = x;
|
this.x = x;
|
||||||
@ -115,17 +110,13 @@ public final class Quaternion implements Savable, Cloneable, java.io.Serializabl
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* sets the data in a <code>Quaternion</code> object from the given list
|
* sets the data in a <code>Quaternion</code> object from the given list of
|
||||||
* of parameters.
|
* parameters.
|
||||||
*
|
*
|
||||||
* @param x
|
* @param x the x value of the quaternion.
|
||||||
* the x value of the quaternion.
|
* @param y the y value of the quaternion.
|
||||||
* @param y
|
* @param z the z value of the quaternion.
|
||||||
* the y value of the quaternion.
|
* @param w the w value of the quaternion.
|
||||||
* @param z
|
|
||||||
* the z value of the quaternion.
|
|
||||||
* @param w
|
|
||||||
* the w value of the quaternion.
|
|
||||||
* @return this
|
* @return this
|
||||||
*/
|
*/
|
||||||
public Quaternion set(float x, float y, float z, float w) {
|
public Quaternion set(float x, float y, float z, float w) {
|
||||||
@ -141,8 +132,7 @@ public final class Quaternion implements Savable, Cloneable, java.io.Serializabl
|
|||||||
* passed <code>Quaternion</code> object. The values are copied producing
|
* passed <code>Quaternion</code> object. The values are copied producing
|
||||||
* a new object.
|
* a new object.
|
||||||
*
|
*
|
||||||
* @param q
|
* @param q The Quaternion to copy values from.
|
||||||
* The Quaternion to copy values from.
|
|
||||||
* @return this
|
* @return this
|
||||||
*/
|
*/
|
||||||
public Quaternion set(Quaternion q) {
|
public Quaternion set(Quaternion q) {
|
||||||
@ -184,8 +174,7 @@ public final class Quaternion implements Savable, Cloneable, java.io.Serializabl
|
|||||||
* Constructor instantiates a new <code>Quaternion</code> object from an
|
* Constructor instantiates a new <code>Quaternion</code> object from an
|
||||||
* existing quaternion, creating a copy.
|
* existing quaternion, creating a copy.
|
||||||
*
|
*
|
||||||
* @param q
|
* @param q the quaternion to copy.
|
||||||
* the quaternion to copy.
|
|
||||||
*/
|
*/
|
||||||
public Quaternion(Quaternion q) {
|
public Quaternion(Quaternion q) {
|
||||||
this.x = q.x;
|
this.x = q.x;
|
||||||
@ -231,8 +220,10 @@ public final class Quaternion implements Savable, Cloneable, java.io.Serializabl
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* <code>fromAngles</code> builds a Quaternion from the Euler rotation
|
* <code>fromAngles</code> builds a Quaternion from the Euler rotation
|
||||||
* angles (x,y,z) aka (pitch, yaw, roll)). Note that we are applying in order: (y, z, x) aka (yaw, roll, pitch) but
|
* angles (x,y,z) aka (pitch, yaw, roll)).
|
||||||
* we've ordered them in x, y, and z for convenience.
|
* Note that we are applying in order: (y, z, x) aka (yaw, roll, pitch)
|
||||||
|
* but we've ordered them in x, y, and z for convenience.
|
||||||
|
*
|
||||||
* @see <a href="http://www.euclideanspace.com/maths/geometry/rotations/conversions/eulerToQuaternion/index.htm">http://www.euclideanspace.com/maths/geometry/rotations/conversions/eulerToQuaternion/index.htm</a>
|
* @see <a href="http://www.euclideanspace.com/maths/geometry/rotations/conversions/eulerToQuaternion/index.htm">http://www.euclideanspace.com/maths/geometry/rotations/conversions/eulerToQuaternion/index.htm</a>
|
||||||
*
|
*
|
||||||
* @param xAngle
|
* @param xAngle
|
||||||
@ -315,7 +306,6 @@ public final class Quaternion implements Savable, Cloneable, java.io.Serializabl
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* <code>fromRotationMatrix</code> generates a quaternion from a supplied
|
* <code>fromRotationMatrix</code> generates a quaternion from a supplied
|
||||||
* matrix. This matrix is assumed to be a rotational matrix.
|
* matrix. This matrix is assumed to be a rotational matrix.
|
||||||
*
|
*
|
||||||
@ -805,6 +795,7 @@ public final class Quaternion implements Savable, Cloneable, java.io.Serializabl
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the values of this quaternion to the nlerp from itself to q2 by blend.
|
* Sets the values of this quaternion to the nlerp from itself to q2 by blend.
|
||||||
|
*
|
||||||
* @param q2
|
* @param q2
|
||||||
* @param blend
|
* @param blend
|
||||||
*/
|
*/
|
||||||
@ -829,8 +820,7 @@ public final class Quaternion implements Savable, Cloneable, java.io.Serializabl
|
|||||||
* <code>add</code> adds the values of this quaternion to those of the
|
* <code>add</code> adds the values of this quaternion to those of the
|
||||||
* parameter quaternion. The result is returned as a new quaternion.
|
* parameter quaternion. The result is returned as a new quaternion.
|
||||||
*
|
*
|
||||||
* @param q
|
* @param q the quaternion to add to this.
|
||||||
* the quaternion to add to this.
|
|
||||||
* @return the new quaternion.
|
* @return the new quaternion.
|
||||||
*/
|
*/
|
||||||
public Quaternion add(Quaternion q) {
|
public Quaternion add(Quaternion q) {
|
||||||
@ -841,8 +831,7 @@ public final class Quaternion implements Savable, Cloneable, java.io.Serializabl
|
|||||||
* <code>add</code> adds the values of this quaternion to those of the
|
* <code>add</code> adds the values of this quaternion to those of the
|
||||||
* parameter quaternion. The result is stored in this Quaternion.
|
* parameter quaternion. The result is stored in this Quaternion.
|
||||||
*
|
*
|
||||||
* @param q
|
* @param q the quaternion to add to this.
|
||||||
* the quaternion to add to this.
|
|
||||||
* @return This Quaternion after addition.
|
* @return This Quaternion after addition.
|
||||||
*/
|
*/
|
||||||
public Quaternion addLocal(Quaternion q) {
|
public Quaternion addLocal(Quaternion q) {
|
||||||
@ -858,8 +847,7 @@ public final class Quaternion implements Savable, Cloneable, java.io.Serializabl
|
|||||||
* from those of this quaternion. The result is returned as a new
|
* from those of this quaternion. The result is returned as a new
|
||||||
* quaternion.
|
* quaternion.
|
||||||
*
|
*
|
||||||
* @param q
|
* @param q the quaternion to subtract from this.
|
||||||
* the quaternion to subtract from this.
|
|
||||||
* @return the new quaternion.
|
* @return the new quaternion.
|
||||||
*/
|
*/
|
||||||
public Quaternion subtract(Quaternion q) {
|
public Quaternion subtract(Quaternion q) {
|
||||||
@ -870,8 +858,7 @@ public final class Quaternion implements Savable, Cloneable, java.io.Serializabl
|
|||||||
* <code>subtract</code> subtracts the values of the parameter quaternion
|
* <code>subtract</code> subtracts the values of the parameter quaternion
|
||||||
* from those of this quaternion. The result is stored in this Quaternion.
|
* from those of this quaternion. The result is stored in this Quaternion.
|
||||||
*
|
*
|
||||||
* @param q
|
* @param q the quaternion to subtract from this.
|
||||||
* the quaternion to subtract from this.
|
|
||||||
* @return This Quaternion after subtraction.
|
* @return This Quaternion after subtraction.
|
||||||
*/
|
*/
|
||||||
public Quaternion subtractLocal(Quaternion q) {
|
public Quaternion subtractLocal(Quaternion q) {
|
||||||
@ -903,8 +890,7 @@ public final class Quaternion implements Savable, Cloneable, java.io.Serializabl
|
|||||||
* It IS safe for q and res to be the same object.
|
* It IS safe for q and res to be the same object.
|
||||||
* It IS NOT safe for this and res to be the same object.
|
* It IS NOT safe for this and res to be the same object.
|
||||||
*
|
*
|
||||||
* @param q
|
* @param q the quaternion to multiply this quaternion by.
|
||||||
* the quaternion to multiply this quaternion by.
|
|
||||||
* @param res
|
* @param res
|
||||||
* the quaternion to store the result in.
|
* the quaternion to store the result in.
|
||||||
* @return the new quaternion.
|
* @return the new quaternion.
|
||||||
@ -982,8 +968,7 @@ public final class Quaternion implements Savable, Cloneable, java.io.Serializabl
|
|||||||
* corresponds to an axis of the coordinate system defined by the quaternion
|
* corresponds to an axis of the coordinate system defined by the quaternion
|
||||||
* rotation.
|
* rotation.
|
||||||
*
|
*
|
||||||
* @param axis
|
* @param axis the array of vectors to be filled.
|
||||||
* the array of vectors to be filled.
|
|
||||||
*/
|
*/
|
||||||
public void toAxes(Vector3f axis[]) {
|
public void toAxes(Vector3f axis[]) {
|
||||||
Matrix3f tempMat = toRotationMatrix();
|
Matrix3f tempMat = toRotationMatrix();
|
||||||
@ -996,8 +981,7 @@ public final class Quaternion implements Savable, Cloneable, java.io.Serializabl
|
|||||||
* <code>mult</code> multiplies this quaternion by a parameter vector. The
|
* <code>mult</code> multiplies this quaternion by a parameter vector. The
|
||||||
* result is returned as a new vector.
|
* result is returned as a new vector.
|
||||||
*
|
*
|
||||||
* @param v
|
* @param v the vector to multiply this quaternion by.
|
||||||
* the vector to multiply this quaternion by.
|
|
||||||
* @return the new vector.
|
* @return the new vector.
|
||||||
*/
|
*/
|
||||||
public Vector3f mult(Vector3f v) {
|
public Vector3f mult(Vector3f v) {
|
||||||
@ -1008,8 +992,7 @@ public final class Quaternion implements Savable, Cloneable, java.io.Serializabl
|
|||||||
* <code>mult</code> multiplies this quaternion by a parameter vector. The
|
* <code>mult</code> multiplies this quaternion by a parameter vector. The
|
||||||
* result is stored in the supplied vector
|
* result is stored in the supplied vector
|
||||||
*
|
*
|
||||||
* @param v
|
* @param v the vector to multiply this quaternion by.
|
||||||
* the vector to multiply this quaternion by.
|
|
||||||
* @return v
|
* @return v
|
||||||
*/
|
*/
|
||||||
public Vector3f multLocal(Vector3f v) {
|
public Vector3f multLocal(Vector3f v) {
|
||||||
@ -1031,8 +1014,7 @@ public final class Quaternion implements Savable, Cloneable, java.io.Serializabl
|
|||||||
* stored in this Quaternion, which is also returned for chaining. Similar
|
* stored in this Quaternion, which is also returned for chaining. Similar
|
||||||
* to this *= q.
|
* to this *= q.
|
||||||
*
|
*
|
||||||
* @param q
|
* @param q The Quaternion to multiply this one by.
|
||||||
* The Quaternion to multiply this one by.
|
|
||||||
* @return This Quaternion, after multiplication.
|
* @return This Quaternion, after multiplication.
|
||||||
*/
|
*/
|
||||||
public Quaternion multLocal(Quaternion q) {
|
public Quaternion multLocal(Quaternion q) {
|
||||||
@ -1051,14 +1033,10 @@ public final class Quaternion implements Savable, Cloneable, java.io.Serializabl
|
|||||||
* stored in this Quaternion, which is also returned for chaining. Similar
|
* stored in this Quaternion, which is also returned for chaining. Similar
|
||||||
* to this *= q.
|
* to this *= q.
|
||||||
*
|
*
|
||||||
* @param qx -
|
* @param qx quat x value
|
||||||
* quat x value
|
* @param qy quat y value
|
||||||
* @param qy -
|
* @param qz quat z value
|
||||||
* quat y value
|
* @param qw quat w value
|
||||||
* @param qz -
|
|
||||||
* quat z value
|
|
||||||
* @param qw -
|
|
||||||
* quat w value
|
|
||||||
*
|
*
|
||||||
* @return This Quaternion, after multiplication.
|
* @return This Quaternion, after multiplication.
|
||||||
*/
|
*/
|
||||||
@ -1304,7 +1282,6 @@ public final class Quaternion implements Savable, Cloneable, java.io.Serializabl
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* <code>hashCode</code> returns the hash code value as an integer and is
|
* <code>hashCode</code> returns the hash code value as an integer and is
|
||||||
* supported for the benefit of hashing based collection classes such as
|
* supported for the benefit of hashing based collection classes such as
|
||||||
* Hashtable, HashMap, HashSet etc.
|
* Hashtable, HashMap, HashSet etc.
|
||||||
|
@ -66,6 +66,7 @@ public class Spline implements Savable {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a spline
|
* Create a spline
|
||||||
|
*
|
||||||
* @param splineType the type of the spline @see {SplineType}
|
* @param splineType the type of the spline @see {SplineType}
|
||||||
* @param controlPoints an array of vector to use as control points of the spline
|
* @param controlPoints an array of vector to use as control points of the spline
|
||||||
* If the type of the curve is Bezier curve the control points should be provided
|
* If the type of the curve is Bezier curve the control points should be provided
|
||||||
@ -95,6 +96,7 @@ public class Spline implements Savable {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a spline
|
* Create a spline
|
||||||
|
*
|
||||||
* @param splineType the type of the spline @see {SplineType}
|
* @param splineType the type of the spline @see {SplineType}
|
||||||
* @param controlPoints a list of vector to use as control points of the spline
|
* @param controlPoints a list of vector to use as control points of the spline
|
||||||
* If the type of the curve is Bezier curve the control points should be provided
|
* If the type of the curve is Bezier curve the control points should be provided
|
||||||
@ -122,6 +124,7 @@ public class Spline implements Savable {
|
|||||||
/**
|
/**
|
||||||
* Create a NURBS spline. A spline type is automatically set to SplineType.Nurb.
|
* Create a NURBS spline. A spline type is automatically set to SplineType.Nurb.
|
||||||
* The cycle is set to <b>false</b> by default.
|
* The cycle is set to <b>false</b> by default.
|
||||||
|
*
|
||||||
* @param controlPoints a list of vector to use as control points of the spline
|
* @param controlPoints a list of vector to use as control points of the spline
|
||||||
* @param nurbKnots the nurb's spline knots
|
* @param nurbKnots the nurb's spline knots
|
||||||
*/
|
*/
|
||||||
@ -175,6 +178,7 @@ public class Spline implements Savable {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds a controlPoint to the spline
|
* Adds a controlPoint to the spline
|
||||||
|
*
|
||||||
* @param controlPoint a position in world space
|
* @param controlPoint a position in world space
|
||||||
*/
|
*/
|
||||||
public void addControlPoint(Vector3f controlPoint) {
|
public void addControlPoint(Vector3f controlPoint) {
|
||||||
@ -192,6 +196,7 @@ public class Spline implements Savable {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* remove the controlPoint from the spline
|
* remove the controlPoint from the spline
|
||||||
|
*
|
||||||
* @param controlPoint the controlPoint to remove
|
* @param controlPoint the controlPoint to remove
|
||||||
*/
|
*/
|
||||||
public void removeControlPoint(Vector3f controlPoint) {
|
public void removeControlPoint(Vector3f controlPoint) {
|
||||||
@ -274,9 +279,12 @@ public class Spline implements Savable {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Interpolate a position on the spline
|
* Interpolate a position on the spline
|
||||||
* @param value a value from 0 to 1 that represent the position between the current control point and the next one
|
*
|
||||||
|
* @param value a value from 0 to 1 that represent the position between the
|
||||||
|
* current control point and the next one
|
||||||
* @param currentControlPoint the current control point
|
* @param currentControlPoint the current control point
|
||||||
* @param store a vector to store the result (use null to create a new one that will be returned by the method)
|
* @param store a vector to store the result (use null to create a new one
|
||||||
|
* that will be returned by the method)
|
||||||
* @return the position
|
* @return the position
|
||||||
*/
|
*/
|
||||||
public Vector3f interpolate(float value, int currentControlPoint, Vector3f store) {
|
public Vector3f interpolate(float value, int currentControlPoint, Vector3f store) {
|
||||||
@ -330,6 +338,7 @@ public class Spline implements Savable {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* set to true to make the spline cycle
|
* set to true to make the spline cycle
|
||||||
|
*
|
||||||
* @param cycle
|
* @param cycle
|
||||||
*/
|
*/
|
||||||
public void setCycle(boolean cycle) {
|
public void setCycle(boolean cycle) {
|
||||||
@ -365,6 +374,7 @@ public class Spline implements Savable {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the type of the spline
|
* Sets the type of the spline
|
||||||
|
*
|
||||||
* @param type
|
* @param type
|
||||||
*/
|
*/
|
||||||
public void setType(SplineType type) {
|
public void setType(SplineType type) {
|
||||||
@ -387,10 +397,11 @@ public class Spline implements Savable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//////////// NURBS getters /////////////////////
|
//////////// NURBS getters /////////////////////
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method returns the minimum nurb curve knot value. Check the nurb type before calling this method. It the curve is not of a Nurb
|
* This method returns the minimum nurb curve knot value. Check the nurb
|
||||||
* type - NPE will be thrown.
|
* type before calling this method. It the curve is not of a Nurb type - NPE
|
||||||
|
* will be thrown.
|
||||||
|
*
|
||||||
* @return the minimum nurb curve knot value
|
* @return the minimum nurb curve knot value
|
||||||
*/
|
*/
|
||||||
public float getMinNurbKnot() {
|
public float getMinNurbKnot() {
|
||||||
@ -398,8 +409,10 @@ public class Spline implements Savable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method returns the maximum nurb curve knot value. Check the nurb type before calling this method. It the curve is not of a Nurb
|
* This method returns the maximum nurb curve knot value. Check the nurb
|
||||||
* type - NPE will be thrown.
|
* type before calling this method. It the curve is not of a Nurb type - NPE
|
||||||
|
* will be thrown.
|
||||||
|
*
|
||||||
* @return the maximum nurb curve knot value
|
* @return the maximum nurb curve knot value
|
||||||
*/
|
*/
|
||||||
public float getMaxNurbKnot() {
|
public float getMaxNurbKnot() {
|
||||||
@ -408,6 +421,7 @@ public class Spline implements Savable {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* This method returns NURBS' spline knots.
|
* This method returns NURBS' spline knots.
|
||||||
|
*
|
||||||
* @return NURBS' spline knots
|
* @return NURBS' spline knots
|
||||||
*/
|
*/
|
||||||
public List<Float> getKnots() {
|
public List<Float> getKnots() {
|
||||||
@ -416,6 +430,7 @@ public class Spline implements Savable {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* This method returns NURBS' spline weights.
|
* This method returns NURBS' spline weights.
|
||||||
|
*
|
||||||
* @return NURBS' spline weights
|
* @return NURBS' spline weights
|
||||||
*/
|
*/
|
||||||
public float[] getWeights() {
|
public float[] getWeights() {
|
||||||
@ -424,6 +439,7 @@ public class Spline implements Savable {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* This method returns NURBS' spline basis function degree.
|
* This method returns NURBS' spline basis function degree.
|
||||||
|
*
|
||||||
* @return NURBS' spline basis function degree
|
* @return NURBS' spline basis function degree
|
||||||
*/
|
*/
|
||||||
public int getBasisFunctionDegree() {
|
public int getBasisFunctionDegree() {
|
||||||
@ -459,7 +475,8 @@ public class Spline implements Savable {
|
|||||||
public void read(JmeImporter im) throws IOException {
|
public void read(JmeImporter im) throws IOException {
|
||||||
InputCapsule in = im.getCapsule(this);
|
InputCapsule in = im.getCapsule(this);
|
||||||
|
|
||||||
controlPoints = in.readSavableArrayList("controlPoints", new ArrayList<>()); /* Empty List as default, prevents null pointers */
|
controlPoints = in.readSavableArrayList("controlPoints", new ArrayList<>());
|
||||||
|
/* Empty List as default, prevents null pointers */
|
||||||
float list[] = in.readFloatArray("segmentsLength", null);
|
float list[] = in.readFloatArray("segmentsLength", null);
|
||||||
if (list != null) {
|
if (list != null) {
|
||||||
segmentsLength = new ArrayList<Float>();
|
segmentsLength = new ArrayList<Float>();
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2009-2018 jMonkeyEngine
|
* Copyright (c) 2009-2020 jMonkeyEngine
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@ -77,6 +77,7 @@ public final class Transform implements Savable, Cloneable, java.io.Serializable
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets this rotation to the given Quaternion value.
|
* Sets this rotation to the given Quaternion value.
|
||||||
|
*
|
||||||
* @param rot The new rotation for this matrix.
|
* @param rot The new rotation for this matrix.
|
||||||
* @return this
|
* @return this
|
||||||
*/
|
*/
|
||||||
@ -87,6 +88,7 @@ public final class Transform implements Savable, Cloneable, java.io.Serializable
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets this translation to the given value.
|
* Sets this translation to the given value.
|
||||||
|
*
|
||||||
* @param trans The new translation for this matrix.
|
* @param trans The new translation for this matrix.
|
||||||
* @return this
|
* @return this
|
||||||
*/
|
*/
|
||||||
@ -97,6 +99,7 @@ public final class Transform implements Savable, Cloneable, java.io.Serializable
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the translation vector in this matrix.
|
* Return the translation vector in this matrix.
|
||||||
|
*
|
||||||
* @return translation vector.
|
* @return translation vector.
|
||||||
*/
|
*/
|
||||||
public Vector3f getTranslation() {
|
public Vector3f getTranslation() {
|
||||||
@ -105,6 +108,7 @@ public final class Transform implements Savable, Cloneable, java.io.Serializable
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets this scale to the given value.
|
* Sets this scale to the given value.
|
||||||
|
*
|
||||||
* @param scale The new scale for this matrix.
|
* @param scale The new scale for this matrix.
|
||||||
* @return this
|
* @return this
|
||||||
*/
|
*/
|
||||||
@ -115,6 +119,7 @@ public final class Transform implements Savable, Cloneable, java.io.Serializable
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets this scale to the given value.
|
* Sets this scale to the given value.
|
||||||
|
*
|
||||||
* @param scale The new scale for this matrix.
|
* @param scale The new scale for this matrix.
|
||||||
* @return this
|
* @return this
|
||||||
*/
|
*/
|
||||||
@ -125,6 +130,7 @@ public final class Transform implements Savable, Cloneable, java.io.Serializable
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the scale vector in this matrix.
|
* Return the scale vector in this matrix.
|
||||||
|
*
|
||||||
* @return scale vector.
|
* @return scale vector.
|
||||||
*/
|
*/
|
||||||
public Vector3f getScale() {
|
public Vector3f getScale() {
|
||||||
@ -132,31 +138,40 @@ public final class Transform implements Savable, Cloneable, java.io.Serializable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stores this translation value into the given vector3f. If trans is null, a new vector3f is created to
|
* Stores this translation value into the given vector3f. If trans is null,
|
||||||
* hold the value. The value, once stored, is returned.
|
* a new vector3f is created to hold the value. The value, once stored, is
|
||||||
|
* returned.
|
||||||
|
*
|
||||||
* @param trans The store location for this matrix's translation.
|
* @param trans The store location for this matrix's translation.
|
||||||
* @return The value of this matrix's translation.
|
* @return The value of this matrix's translation.
|
||||||
*/
|
*/
|
||||||
public Vector3f getTranslation(Vector3f trans) {
|
public Vector3f getTranslation(Vector3f trans) {
|
||||||
if (trans==null) trans=new Vector3f();
|
if (trans == null) {
|
||||||
|
trans = new Vector3f();
|
||||||
|
}
|
||||||
trans.set(this.translation);
|
trans.set(this.translation);
|
||||||
return trans;
|
return trans;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stores this rotation value into the given Quaternion. If quat is null, a new Quaternion is created to
|
* Stores this rotation value into the given Quaternion. If quat is null, a
|
||||||
* hold the value. The value, once stored, is returned.
|
* new Quaternion is created to hold the value. The value, once stored, is
|
||||||
|
* returned.
|
||||||
|
*
|
||||||
* @param quat The store location for this matrix's rotation.
|
* @param quat The store location for this matrix's rotation.
|
||||||
* @return The value of this matrix's rotation.
|
* @return The value of this matrix's rotation.
|
||||||
*/
|
*/
|
||||||
public Quaternion getRotation(Quaternion quat) {
|
public Quaternion getRotation(Quaternion quat) {
|
||||||
if (quat==null) quat=new Quaternion();
|
if (quat == null) {
|
||||||
|
quat = new Quaternion();
|
||||||
|
}
|
||||||
quat.set(rot);
|
quat.set(rot);
|
||||||
return quat;
|
return quat;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the rotation quaternion in this matrix.
|
* Return the rotation quaternion in this matrix.
|
||||||
|
*
|
||||||
* @return rotation quaternion.
|
* @return rotation quaternion.
|
||||||
*/
|
*/
|
||||||
public Quaternion getRotation() {
|
public Quaternion getRotation() {
|
||||||
@ -164,22 +179,29 @@ public final class Transform implements Savable, Cloneable, java.io.Serializable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stores this scale value into the given vector3f. If scale is null, a new vector3f is created to
|
* Stores this scale value into the given vector3f. If scale is null, a new
|
||||||
* hold the value. The value, once stored, is returned.
|
* vector3f is created to hold the value. The value, once stored, is
|
||||||
|
* returned.
|
||||||
|
*
|
||||||
* @param scale The store location for this matrix's scale.
|
* @param scale The store location for this matrix's scale.
|
||||||
* @return The value of this matrix's scale.
|
* @return The value of this matrix's scale.
|
||||||
*/
|
*/
|
||||||
public Vector3f getScale(Vector3f scale) {
|
public Vector3f getScale(Vector3f scale) {
|
||||||
if (scale==null) scale=new Vector3f();
|
if (scale == null) {
|
||||||
|
scale = new Vector3f();
|
||||||
|
}
|
||||||
scale.set(this.scale);
|
scale.set(this.scale);
|
||||||
return scale;
|
return scale;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets this transform to the interpolation between the first transform and the second by delta amount.
|
* Sets this transform to the interpolation between the first transform and
|
||||||
|
* the second by delta amount.
|
||||||
|
*
|
||||||
* @param t1 The beginning transform.
|
* @param t1 The beginning transform.
|
||||||
* @param t2 The ending transform.
|
* @param t2 The ending transform.
|
||||||
* @param delta An amount between 0 and 1 representing how far to interpolate from t1 to t2.
|
* @param delta An amount between 0 and 1 representing how far to
|
||||||
|
* interpolate from t1 to t2.
|
||||||
*/
|
*/
|
||||||
public void interpolateTransforms(Transform t1, Transform t2, float delta) {
|
public void interpolateTransforms(Transform t1, Transform t2, float delta) {
|
||||||
t1.rot.nlerp(t2.rot, delta);
|
t1.rot.nlerp(t2.rot, delta);
|
||||||
@ -189,7 +211,9 @@ public final class Transform implements Savable, Cloneable, java.io.Serializable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Changes the values of this matrix according to its parent. Very similar to the concept of Node/Spatial transforms.
|
* Changes the values of this matrix according to its parent. Very similar
|
||||||
|
* to the concept of Node/Spatial transforms.
|
||||||
|
*
|
||||||
* @param parent The parent matrix.
|
* @param parent The parent matrix.
|
||||||
* @return This matrix, after combining.
|
* @return This matrix, after combining.
|
||||||
*/
|
*/
|
||||||
@ -202,8 +226,7 @@ public final class Transform implements Savable, Cloneable, java.io.Serializable
|
|||||||
translation.multLocal(parent.scale);
|
translation.multLocal(parent.scale);
|
||||||
//applying parent rotation to local translation, then applying parent translation to local translation.
|
//applying parent rotation to local translation, then applying parent translation to local translation.
|
||||||
//Note that parent.rot.multLocal(translation) doesn't modify "parent.rot" but "translation"
|
//Note that parent.rot.multLocal(translation) doesn't modify "parent.rot" but "translation"
|
||||||
parent
|
parent.rot
|
||||||
.rot
|
|
||||||
.multLocal(translation)
|
.multLocal(translation)
|
||||||
.addLocal(parent.translation);
|
.addLocal(parent.translation);
|
||||||
|
|
||||||
@ -212,6 +235,7 @@ public final class Transform implements Savable, Cloneable, java.io.Serializable
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets this matrix's translation to the given x,y,z values.
|
* Sets this matrix's translation to the given x,y,z values.
|
||||||
|
*
|
||||||
* @param x This matrix's new x translation.
|
* @param x This matrix's new x translation.
|
||||||
* @param y This matrix's new y translation.
|
* @param y This matrix's new y translation.
|
||||||
* @param z This matrix's new z translation.
|
* @param z This matrix's new z translation.
|
||||||
@ -224,6 +248,7 @@ public final class Transform implements Savable, Cloneable, java.io.Serializable
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets this matrix's scale to the given x,y,z values.
|
* Sets this matrix's scale to the given x,y,z values.
|
||||||
|
*
|
||||||
* @param x This matrix's new x scale.
|
* @param x This matrix's new x scale.
|
||||||
* @param y This matrix's new y scale.
|
* @param y This matrix's new y scale.
|
||||||
* @param z This matrix's new z scale.
|
* @param z This matrix's new z scale.
|
||||||
@ -235,8 +260,9 @@ public final class Transform implements Savable, Cloneable, java.io.Serializable
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Vector3f transformVector(final Vector3f in, Vector3f store) {
|
public Vector3f transformVector(final Vector3f in, Vector3f store) {
|
||||||
if (store == null)
|
if (store == null) {
|
||||||
store = new Vector3f();
|
store = new Vector3f();
|
||||||
|
}
|
||||||
|
|
||||||
// multiply with scale first, then rotate, finally translate (cf.
|
// multiply with scale first, then rotate, finally translate (cf.
|
||||||
// Eberly)
|
// Eberly)
|
||||||
@ -244,14 +270,14 @@ public final class Transform implements Savable, Cloneable, java.io.Serializable
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Vector3f transformInverseVector(final Vector3f in, Vector3f store) {
|
public Vector3f transformInverseVector(final Vector3f in, Vector3f store) {
|
||||||
if (store == null)
|
if (store == null) {
|
||||||
store = new Vector3f();
|
store = new Vector3f();
|
||||||
|
}
|
||||||
|
|
||||||
// The author of this code should look above and take the inverse of that
|
// The author of this code should look above and take the inverse of that
|
||||||
// But for some reason, they didn't ..
|
// But for some reason, they didn't ..
|
||||||
// in.subtract(translation, store).divideLocal(scale);
|
// in.subtract(translation, store).divideLocal(scale);
|
||||||
// rot.inverse().mult(store, store);
|
// rot.inverse().mult(store, store);
|
||||||
|
|
||||||
in.subtract(translation, store);
|
in.subtract(translation, store);
|
||||||
rot.inverse().mult(store, store);
|
rot.inverse().mult(store, store);
|
||||||
store.divideLocal(scale);
|
store.divideLocal(scale);
|
||||||
@ -332,13 +358,15 @@ public final class Transform implements Savable, Cloneable, java.io.Serializable
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return getClass().getSimpleName() + "[ " + translation.x + ", " + translation.y + ", " + translation.z + "]\n"
|
return getClass().getSimpleName()
|
||||||
|
+ "[ " + translation.x + ", " + translation.y + ", " + translation.z + "]\n"
|
||||||
+ "[ " + rot.x + ", " + rot.y + ", " + rot.z + ", " + rot.w + "]\n"
|
+ "[ " + rot.x + ", " + rot.y + ", " + rot.z + ", " + rot.w + "]\n"
|
||||||
+ "[ " + scale.x + " , " + scale.y + ", " + scale.z + "]";
|
+ "[ " + scale.x + " , " + scale.y + ", " + scale.z + "]";
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets this matrix to be equal to the given matrix.
|
* Sets this matrix to be equal to the given matrix.
|
||||||
|
*
|
||||||
* @param matrixQuat The matrix to be equal to.
|
* @param matrixQuat The matrix to be equal to.
|
||||||
* @return this
|
* @return this
|
||||||
*/
|
*/
|
||||||
|
@ -29,7 +29,6 @@
|
|||||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.jme3.math;
|
package com.jme3.math;
|
||||||
|
|
||||||
import com.jme3.export.*;
|
import com.jme3.export.*;
|
||||||
@ -52,7 +51,6 @@ import java.util.logging.Logger;
|
|||||||
public final class Vector3f implements Savable, Cloneable, java.io.Serializable {
|
public final class Vector3f implements Savable, Cloneable, java.io.Serializable {
|
||||||
|
|
||||||
static final long serialVersionUID = 1;
|
static final long serialVersionUID = 1;
|
||||||
|
|
||||||
private static final Logger logger = Logger.getLogger(Vector3f.class.getName());
|
private static final Logger logger = Logger.getLogger(Vector3f.class.getName());
|
||||||
|
|
||||||
public final static Vector3f ZERO = new Vector3f(0, 0, 0);
|
public final static Vector3f ZERO = new Vector3f(0, 0, 0);
|
||||||
@ -69,18 +67,14 @@ public final class Vector3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
Float.NEGATIVE_INFINITY,
|
Float.NEGATIVE_INFINITY,
|
||||||
Float.NEGATIVE_INFINITY,
|
Float.NEGATIVE_INFINITY,
|
||||||
Float.NEGATIVE_INFINITY);
|
Float.NEGATIVE_INFINITY);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* the x value of the vector.
|
* the x value of the vector.
|
||||||
*/
|
*/
|
||||||
public float x;
|
public float x;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* the y value of the vector.
|
* the y value of the vector.
|
||||||
*/
|
*/
|
||||||
public float y;
|
public float y;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* the z value of the vector.
|
* the z value of the vector.
|
||||||
*/
|
*/
|
||||||
@ -156,7 +150,6 @@ public final class Vector3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* <code>add</code> adds a provided vector to this vector creating a
|
* <code>add</code> adds a provided vector to this vector creating a
|
||||||
* resultant vector which is returned. If the provided vector is null, null
|
* resultant vector which is returned. If the provided vector is null, null
|
||||||
* is returned.
|
* is returned.
|
||||||
@ -174,7 +167,6 @@ public final class Vector3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* <code>add</code> adds the values of a provided vector storing the
|
* <code>add</code> adds the values of a provided vector storing the
|
||||||
* values in the supplied vector.
|
* values in the supplied vector.
|
||||||
*
|
*
|
||||||
@ -212,7 +204,6 @@ public final class Vector3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* <code>add</code> adds the provided values to this vector, creating a
|
* <code>add</code> adds the provided values to this vector, creating a
|
||||||
* new vector that is then returned.
|
* new vector that is then returned.
|
||||||
*
|
*
|
||||||
@ -249,7 +240,6 @@ public final class Vector3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* <code>scaleAdd</code> multiplies this vector by a scalar then adds the
|
* <code>scaleAdd</code> multiplies this vector by a scalar then adds the
|
||||||
* given Vector3f.
|
* given Vector3f.
|
||||||
*
|
*
|
||||||
@ -266,7 +256,6 @@ public final class Vector3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* <code>scaleAdd</code> multiplies the given vector by a scalar then adds
|
* <code>scaleAdd</code> multiplies the given vector by a scalar then adds
|
||||||
* the given vector.
|
* the given vector.
|
||||||
*
|
*
|
||||||
@ -285,7 +274,6 @@ public final class Vector3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* <code>dot</code> calculates the dot product of this vector with a
|
* <code>dot</code> calculates the dot product of this vector with a
|
||||||
* provided vector. If the provided vector is null, 0 is returned.
|
* provided vector. If the provided vector is null, 0 is returned.
|
||||||
*
|
*
|
||||||
@ -342,7 +330,9 @@ public final class Vector3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
* @return result, after receiving the cross product vector.
|
* @return result, after receiving the cross product vector.
|
||||||
*/
|
*/
|
||||||
public Vector3f cross(float otherX, float otherY, float otherZ, Vector3f result) {
|
public Vector3f cross(float otherX, float otherY, float otherZ, Vector3f result) {
|
||||||
if (result == null) result = new Vector3f();
|
if (result == null) {
|
||||||
|
result = new Vector3f();
|
||||||
|
}
|
||||||
float resX = ((y * otherZ) - (z * otherY));
|
float resX = ((y * otherZ) - (z * otherY));
|
||||||
float resY = ((z * otherX) - (x * otherZ));
|
float resY = ((z * otherX) - (x * otherZ));
|
||||||
float resZ = ((x * otherY) - (y * otherX));
|
float resZ = ((x * otherY) - (y * otherX));
|
||||||
@ -465,7 +455,6 @@ public final class Vector3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* <code>mult</code> multiplies this vector by a scalar. The resultant
|
* <code>mult</code> multiplies this vector by a scalar. The resultant
|
||||||
* vector is returned.
|
* vector is returned.
|
||||||
*
|
*
|
||||||
@ -478,7 +467,6 @@ public final class Vector3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* <code>mult</code> multiplies this vector by a scalar. The resultant
|
* <code>mult</code> multiplies this vector by a scalar. The resultant
|
||||||
* vector is supplied as the second parameter and returned.
|
* vector is supplied as the second parameter and returned.
|
||||||
*
|
*
|
||||||
@ -581,11 +569,12 @@ public final class Vector3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
logger.warning("Provided vector is null, null returned.");
|
logger.warning("Provided vector is null, null returned.");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if (store == null) store = new Vector3f();
|
if (store == null) {
|
||||||
|
store = new Vector3f();
|
||||||
|
}
|
||||||
return store.set(x * vec.x, y * vec.y, z * vec.z);
|
return store.set(x * vec.x, y * vec.y, z * vec.z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <code>divide</code> divides the values of this vector by a scalar and
|
* <code>divide</code> divides the values of this vector by a scalar and
|
||||||
* returns the result. The values of this vector remain untouched.
|
* returns the result. The values of this vector remain untouched.
|
||||||
@ -616,7 +605,6 @@ public final class Vector3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <code>divide</code> divides the values of this vector by a scalar and
|
* <code>divide</code> divides the values of this vector by a scalar and
|
||||||
* returns the result. The values of this vector remain untouched.
|
* returns the result. The values of this vector remain untouched.
|
||||||
@ -646,7 +634,6 @@ public final class Vector3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* <code>negate</code> returns the negative of this vector. All values are
|
* <code>negate</code> returns the negative of this vector. All values are
|
||||||
* negated and set to a new vector.
|
* negated and set to a new vector.
|
||||||
*
|
*
|
||||||
@ -657,7 +644,6 @@ public final class Vector3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* <code>negateLocal</code> negates the internal values of this vector.
|
* <code>negateLocal</code> negates the internal values of this vector.
|
||||||
*
|
*
|
||||||
* @return this.
|
* @return this.
|
||||||
@ -670,7 +656,6 @@ public final class Vector3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* <code>subtract</code> subtracts the values of a given vector from those
|
* <code>subtract</code> subtracts the values of a given vector from those
|
||||||
* of this vector creating a new vector object. If the provided vector is
|
* of this vector creating a new vector object. If the provided vector is
|
||||||
* null, null is returned.
|
* null, null is returned.
|
||||||
@ -704,7 +689,6 @@ public final class Vector3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* <code>subtract</code>
|
* <code>subtract</code>
|
||||||
*
|
*
|
||||||
* @param vec
|
* @param vec
|
||||||
@ -724,7 +708,6 @@ public final class Vector3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* <code>subtract</code> subtracts the provided values from this vector,
|
* <code>subtract</code> subtracts the provided values from this vector,
|
||||||
* creating a new vector that is then returned.
|
* creating a new vector that is then returned.
|
||||||
*
|
*
|
||||||
@ -804,6 +787,7 @@ public final class Vector3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
* <code>maxLocal</code> computes the maximum value for each
|
* <code>maxLocal</code> computes the maximum value for each
|
||||||
* component in this and <code>other</code> vector. The result is stored
|
* component in this and <code>other</code> vector. The result is stored
|
||||||
* in this vector.
|
* in this vector.
|
||||||
|
*
|
||||||
* @param other
|
* @param other
|
||||||
*/
|
*/
|
||||||
public Vector3f maxLocal(Vector3f other) {
|
public Vector3f maxLocal(Vector3f other) {
|
||||||
@ -817,6 +801,7 @@ public final class Vector3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
* <code>minLocal</code> computes the minimum value for each
|
* <code>minLocal</code> computes the minimum value for each
|
||||||
* component in this and <code>other</code> vector. The result is stored
|
* component in this and <code>other</code> vector. The result is stored
|
||||||
* in this vector.
|
* in this vector.
|
||||||
|
*
|
||||||
* @param other
|
* @param other
|
||||||
*/
|
*/
|
||||||
public Vector3f minLocal(Vector3f other) {
|
public Vector3f minLocal(Vector3f other) {
|
||||||
@ -850,6 +835,7 @@ public final class Vector3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
/**
|
/**
|
||||||
* Sets this vector to the interpolation by changeAmnt from this to the finalVec
|
* Sets this vector to the interpolation by changeAmnt from this to the finalVec
|
||||||
* this=(1-changeAmnt)*this + changeAmnt * finalVec
|
* this=(1-changeAmnt)*this + changeAmnt * finalVec
|
||||||
|
*
|
||||||
* @param finalVec The final vector to interpolate towards
|
* @param finalVec The final vector to interpolate towards
|
||||||
* @param changeAmnt An amount between 0.0 - 1.0 representing a percentage
|
* @param changeAmnt An amount between 0.0 - 1.0 representing a percentage
|
||||||
* change from this towards finalVec
|
* change from this towards finalVec
|
||||||
@ -864,6 +850,7 @@ public final class Vector3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
/**
|
/**
|
||||||
* Sets this vector to the interpolation by changeAmnt from beginVec to finalVec
|
* Sets this vector to the interpolation by changeAmnt from beginVec to finalVec
|
||||||
* this=(1-changeAmnt)*beginVec + changeAmnt * finalVec
|
* this=(1-changeAmnt)*beginVec + changeAmnt * finalVec
|
||||||
|
*
|
||||||
* @param beginVec the beginning vector (changeAmnt=0)
|
* @param beginVec the beginning vector (changeAmnt=0)
|
||||||
* @param finalVec The final vector to interpolate towards
|
* @param finalVec The final vector to interpolate towards
|
||||||
* @param changeAmnt An amount between 0.0 - 1.0 representing a percentage
|
* @param changeAmnt An amount between 0.0 - 1.0 representing a percentage
|
||||||
@ -879,17 +866,24 @@ public final class Vector3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
/**
|
/**
|
||||||
* Check a vector... if it is null or its floats are NaN or infinite,
|
* Check a vector... if it is null or its floats are NaN or infinite,
|
||||||
* return false. Else return true.
|
* return false. Else return true.
|
||||||
|
*
|
||||||
* @param vector the vector to check
|
* @param vector the vector to check
|
||||||
* @return true or false as stated above.
|
* @return true or false as stated above.
|
||||||
*/
|
*/
|
||||||
public static boolean isValidVector(Vector3f vector) {
|
public static boolean isValidVector(Vector3f vector) {
|
||||||
if (vector == null) return false;
|
if (vector == null) {
|
||||||
if (Float.isNaN(vector.x) ||
|
return false;
|
||||||
Float.isNaN(vector.y) ||
|
}
|
||||||
Float.isNaN(vector.z)) return false;
|
if (Float.isNaN(vector.x)
|
||||||
if (Float.isInfinite(vector.x) ||
|
|| Float.isNaN(vector.y)
|
||||||
Float.isInfinite(vector.y) ||
|
|| Float.isNaN(vector.z)) {
|
||||||
Float.isInfinite(vector.z)) return false;
|
return false;
|
||||||
|
}
|
||||||
|
if (Float.isInfinite(vector.x)
|
||||||
|
|| Float.isInfinite(vector.y)
|
||||||
|
|| Float.isInfinite(vector.z)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -960,14 +954,24 @@ public final class Vector3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object o) {
|
public boolean equals(Object o) {
|
||||||
if (!(o instanceof Vector3f)) { return false; }
|
if (!(o instanceof Vector3f)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (this == o) { return true; }
|
if (this == o) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
Vector3f comp = (Vector3f) o;
|
Vector3f comp = (Vector3f) o;
|
||||||
if (Float.compare(x,comp.x) != 0) return false;
|
if (Float.compare(x, comp.x) != 0) {
|
||||||
if (Float.compare(y,comp.y) != 0) return false;
|
return false;
|
||||||
if (Float.compare(z,comp.z) != 0) return false;
|
}
|
||||||
|
if (Float.compare(y, comp.y) != 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (Float.compare(z, comp.z) != 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -995,6 +999,7 @@ public final class Vector3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
* <code>hashCode</code> returns a unique code for this vector object based
|
* <code>hashCode</code> returns a unique code for this vector object based
|
||||||
* on its values. If two vectors are logically equivalent, they will return
|
* on its values. If two vectors are logically equivalent, they will return
|
||||||
* the same hash code value.
|
* the same hash code value.
|
||||||
|
*
|
||||||
* @return the hash code value of this vector.
|
* @return the hash code value of this vector.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@ -1103,5 +1108,4 @@ public final class Vector3f implements Savable, Cloneable, java.io.Serializable
|
|||||||
}
|
}
|
||||||
throw new IllegalArgumentException("index must be either 0, 1 or 2");
|
throw new IllegalArgumentException("index must be either 0, 1 or 2");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2009-2012 jMonkeyEngine
|
* Copyright (c) 2009-2020 jMonkeyEngine
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@ -122,18 +122,23 @@ public class VirtualIndexBuffer extends IndexBuffer {
|
|||||||
return triIndex + vertIndex;
|
return triIndex + vertIndex;
|
||||||
} else {
|
} else {
|
||||||
switch (vertIndex) {
|
switch (vertIndex) {
|
||||||
case 0: return triIndex + 1;
|
case 0:
|
||||||
case 1: return triIndex;
|
return triIndex + 1;
|
||||||
case 2: return triIndex + 2;
|
case 1:
|
||||||
default: throw new AssertionError();
|
return triIndex;
|
||||||
|
case 2:
|
||||||
|
return triIndex + 2;
|
||||||
|
default:
|
||||||
|
throw new AssertionError();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (meshMode == Mode.TriangleFan) {
|
} else if (meshMode == Mode.TriangleFan) {
|
||||||
int vertIndex = i % 3;
|
int vertIndex = i % 3;
|
||||||
if (vertIndex == 0)
|
if (vertIndex == 0) {
|
||||||
return 0;
|
return 0;
|
||||||
else
|
} else {
|
||||||
return (i / 3) + vertIndex;
|
return (i / 3) + vertIndex;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2009-2019 jMonkeyEngine
|
* Copyright (c) 2009-2020 jMonkeyEngine
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -186,8 +186,9 @@ public class FrameBuffer extends NativeObject {
|
|||||||
*/
|
*/
|
||||||
public FrameBuffer(int width, int height, int samples) {
|
public FrameBuffer(int width, int height, int samples) {
|
||||||
super();
|
super();
|
||||||
if (width <= 0 || height <= 0)
|
if (width <= 0 || height <= 0) {
|
||||||
throw new IllegalArgumentException("FrameBuffer must have valid size.");
|
throw new IllegalArgumentException("FrameBuffer must have valid size.");
|
||||||
|
}
|
||||||
|
|
||||||
this.width = width;
|
this.width = width;
|
||||||
this.height = height;
|
this.height = height;
|
||||||
@ -214,11 +215,13 @@ public class FrameBuffer extends NativeObject {
|
|||||||
* @throws IllegalArgumentException If <code>format</code> is not a depth format.
|
* @throws IllegalArgumentException If <code>format</code> is not a depth format.
|
||||||
*/
|
*/
|
||||||
public void setDepthBuffer(Image.Format format) {
|
public void setDepthBuffer(Image.Format format) {
|
||||||
if (id != -1)
|
if (id != -1) {
|
||||||
throw new UnsupportedOperationException("FrameBuffer already initialized.");
|
throw new UnsupportedOperationException("FrameBuffer already initialized.");
|
||||||
|
}
|
||||||
|
|
||||||
if (!format.isDepthFormat())
|
if (!format.isDepthFormat()) {
|
||||||
throw new IllegalArgumentException("Depth buffer format must be depth.");
|
throw new IllegalArgumentException("Depth buffer format must be depth.");
|
||||||
|
}
|
||||||
|
|
||||||
depthBuf = new RenderBuffer();
|
depthBuf = new RenderBuffer();
|
||||||
depthBuf.slot = format.isDepthStencilFormat() ? SLOT_DEPTH_STENCIL : SLOT_DEPTH;
|
depthBuf.slot = format.isDepthStencilFormat() ? SLOT_DEPTH_STENCIL : SLOT_DEPTH;
|
||||||
@ -232,11 +235,13 @@ public class FrameBuffer extends NativeObject {
|
|||||||
* @throws IllegalArgumentException If <code>format</code> is not a color format.
|
* @throws IllegalArgumentException If <code>format</code> is not a color format.
|
||||||
*/
|
*/
|
||||||
public void setColorBuffer(Image.Format format) {
|
public void setColorBuffer(Image.Format format) {
|
||||||
if (id != -1)
|
if (id != -1) {
|
||||||
throw new UnsupportedOperationException("FrameBuffer already initialized.");
|
throw new UnsupportedOperationException("FrameBuffer already initialized.");
|
||||||
|
}
|
||||||
|
|
||||||
if (format.isDepthFormat())
|
if (format.isDepthFormat()) {
|
||||||
throw new IllegalArgumentException("Color buffer format must be color/luminance.");
|
throw new IllegalArgumentException("Color buffer format must be color/luminance.");
|
||||||
|
}
|
||||||
|
|
||||||
RenderBuffer colorBuf = new RenderBuffer();
|
RenderBuffer colorBuf = new RenderBuffer();
|
||||||
colorBuf.slot = 0;
|
colorBuf.slot = 0;
|
||||||
@ -248,22 +253,26 @@ public class FrameBuffer extends NativeObject {
|
|||||||
|
|
||||||
private void checkSetTexture(Texture tex, boolean depth) {
|
private void checkSetTexture(Texture tex, boolean depth) {
|
||||||
Image img = tex.getImage();
|
Image img = tex.getImage();
|
||||||
if (img == null)
|
if (img == null) {
|
||||||
throw new IllegalArgumentException("Texture not initialized with RTT.");
|
throw new IllegalArgumentException("Texture not initialized with RTT.");
|
||||||
|
}
|
||||||
|
|
||||||
if (depth && !img.getFormat().isDepthFormat())
|
if (depth && !img.getFormat().isDepthFormat()) {
|
||||||
throw new IllegalArgumentException("Texture image format must be depth.");
|
throw new IllegalArgumentException("Texture image format must be depth.");
|
||||||
else if (!depth && img.getFormat().isDepthFormat())
|
} else if (!depth && img.getFormat().isDepthFormat()) {
|
||||||
throw new IllegalArgumentException("Texture image format must be color/luminance.");
|
throw new IllegalArgumentException("Texture image format must be color/luminance.");
|
||||||
|
}
|
||||||
|
|
||||||
// check that resolution matches texture resolution
|
// check that resolution matches texture resolution
|
||||||
if (width != img.getWidth() || height != img.getHeight())
|
if (width != img.getWidth() || height != img.getHeight()) {
|
||||||
throw new IllegalArgumentException("Texture image resolution " +
|
throw new IllegalArgumentException("Texture image resolution "
|
||||||
"must match FB resolution");
|
+ "must match FB resolution");
|
||||||
|
}
|
||||||
|
|
||||||
if (samples != tex.getImage().getMultiSamples())
|
if (samples != tex.getImage().getMultiSamples()) {
|
||||||
throw new IllegalStateException("Texture samples must match framebuffer samples");
|
throw new IllegalStateException("Texture samples must match framebuffer samples");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If enabled, any shaders rendering into this <code>FrameBuffer</code>
|
* If enabled, any shaders rendering into this <code>FrameBuffer</code>
|
||||||
@ -274,8 +283,11 @@ public class FrameBuffer extends NativeObject {
|
|||||||
* @param enabled True to enable MRT (multiple rendering targets).
|
* @param enabled True to enable MRT (multiple rendering targets).
|
||||||
*/
|
*/
|
||||||
public void setMultiTarget(boolean enabled) {
|
public void setMultiTarget(boolean enabled) {
|
||||||
if (enabled) colorBufIndex = -1;
|
if (enabled) {
|
||||||
else colorBufIndex = 0;
|
colorBufIndex = -1;
|
||||||
|
} else {
|
||||||
|
colorBufIndex = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -297,11 +309,13 @@ public class FrameBuffer extends NativeObject {
|
|||||||
* to any attachment on this framebuffer.
|
* to any attachment on this framebuffer.
|
||||||
*/
|
*/
|
||||||
public void setTargetIndex(int index) {
|
public void setTargetIndex(int index) {
|
||||||
if (index < 0 || index >= 16)
|
if (index < 0 || index >= 16) {
|
||||||
throw new IllegalArgumentException("Target index must be between 0 and 16");
|
throw new IllegalArgumentException("Target index must be between 0 and 16");
|
||||||
|
}
|
||||||
|
|
||||||
if (colorBufs.size() < index)
|
if (colorBufs.size() < index) {
|
||||||
throw new IllegalArgumentException("The target at " + index + " is not set!");
|
throw new IllegalArgumentException("The target at " + index + " is not set!");
|
||||||
|
}
|
||||||
|
|
||||||
colorBufIndex = index;
|
colorBufIndex = index;
|
||||||
setUpdateNeeded();
|
setUpdateNeeded();
|
||||||
@ -374,11 +388,13 @@ public class FrameBuffer extends NativeObject {
|
|||||||
* @see #addColorTexture(com.jme3.texture.Texture2D)
|
* @see #addColorTexture(com.jme3.texture.Texture2D)
|
||||||
*/
|
*/
|
||||||
public void addColorBuffer(Image.Format format) {
|
public void addColorBuffer(Image.Format format) {
|
||||||
if (id != -1)
|
if (id != -1) {
|
||||||
throw new UnsupportedOperationException("FrameBuffer already initialized.");
|
throw new UnsupportedOperationException("FrameBuffer already initialized.");
|
||||||
|
}
|
||||||
|
|
||||||
if (format.isDepthFormat())
|
if (format.isDepthFormat()) {
|
||||||
throw new IllegalArgumentException("Color buffer format must be color/luminance.");
|
throw new IllegalArgumentException("Color buffer format must be color/luminance.");
|
||||||
|
}
|
||||||
|
|
||||||
RenderBuffer colorBuf = new RenderBuffer();
|
RenderBuffer colorBuf = new RenderBuffer();
|
||||||
colorBuf.slot = colorBufs.size();
|
colorBuf.slot = colorBufs.size();
|
||||||
@ -398,8 +414,9 @@ public class FrameBuffer extends NativeObject {
|
|||||||
* @see #addColorBuffer(com.jme3.texture.Image.Format)
|
* @see #addColorBuffer(com.jme3.texture.Image.Format)
|
||||||
*/
|
*/
|
||||||
public void addColorTexture(Texture2D tex) {
|
public void addColorTexture(Texture2D tex) {
|
||||||
if (id != -1)
|
if (id != -1) {
|
||||||
throw new UnsupportedOperationException("FrameBuffer already initialized.");
|
throw new UnsupportedOperationException("FrameBuffer already initialized.");
|
||||||
|
}
|
||||||
|
|
||||||
Image img = tex.getImage();
|
Image img = tex.getImage();
|
||||||
checkSetTexture(tex, false);
|
checkSetTexture(tex, false);
|
||||||
@ -422,8 +439,9 @@ public class FrameBuffer extends NativeObject {
|
|||||||
* @param tex The texture array to add.
|
* @param tex The texture array to add.
|
||||||
*/
|
*/
|
||||||
public void addColorTexture(TextureArray tex, int layer) {
|
public void addColorTexture(TextureArray tex, int layer) {
|
||||||
if (id != -1)
|
if (id != -1) {
|
||||||
throw new UnsupportedOperationException("FrameBuffer already initialized.");
|
throw new UnsupportedOperationException("FrameBuffer already initialized.");
|
||||||
|
}
|
||||||
|
|
||||||
Image img = tex.getImage();
|
Image img = tex.getImage();
|
||||||
checkSetTexture(tex, false);
|
checkSetTexture(tex, false);
|
||||||
@ -448,8 +466,9 @@ public class FrameBuffer extends NativeObject {
|
|||||||
* @param face The face of the cube-map to render to.
|
* @param face The face of the cube-map to render to.
|
||||||
*/
|
*/
|
||||||
public void addColorTexture(TextureCubeMap tex, TextureCubeMap.Face face) {
|
public void addColorTexture(TextureCubeMap tex, TextureCubeMap.Face face) {
|
||||||
if (id != -1)
|
if (id != -1) {
|
||||||
throw new UnsupportedOperationException("FrameBuffer already initialized.");
|
throw new UnsupportedOperationException("FrameBuffer already initialized.");
|
||||||
|
}
|
||||||
|
|
||||||
Image img = tex.getImage();
|
Image img = tex.getImage();
|
||||||
checkSetTexture(tex, false);
|
checkSetTexture(tex, false);
|
||||||
@ -469,8 +488,9 @@ public class FrameBuffer extends NativeObject {
|
|||||||
* @param tex The color texture to set.
|
* @param tex The color texture to set.
|
||||||
*/
|
*/
|
||||||
public void setDepthTexture(Texture2D tex) {
|
public void setDepthTexture(Texture2D tex) {
|
||||||
if (id != -1)
|
if (id != -1) {
|
||||||
throw new UnsupportedOperationException("FrameBuffer already initialized.");
|
throw new UnsupportedOperationException("FrameBuffer already initialized.");
|
||||||
|
}
|
||||||
|
|
||||||
Image img = tex.getImage();
|
Image img = tex.getImage();
|
||||||
checkSetTexture(tex, true);
|
checkSetTexture(tex, true);
|
||||||
@ -480,9 +500,11 @@ public class FrameBuffer extends NativeObject {
|
|||||||
depthBuf.tex = tex;
|
depthBuf.tex = tex;
|
||||||
depthBuf.format = img.getFormat();
|
depthBuf.format = img.getFormat();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setDepthTexture(TextureArray tex, int layer) {
|
public void setDepthTexture(TextureArray tex, int layer) {
|
||||||
if (id != -1)
|
if (id != -1) {
|
||||||
throw new UnsupportedOperationException("FrameBuffer already initialized.");
|
throw new UnsupportedOperationException("FrameBuffer already initialized.");
|
||||||
|
}
|
||||||
|
|
||||||
Image img = tex.getImage();
|
Image img = tex.getImage();
|
||||||
checkSetTexture(tex, true);
|
checkSetTexture(tex, true);
|
||||||
@ -515,8 +537,9 @@ public class FrameBuffer extends NativeObject {
|
|||||||
* If MRT is disabled, the first color buffer is returned.
|
* If MRT is disabled, the first color buffer is returned.
|
||||||
*/
|
*/
|
||||||
public RenderBuffer getColorBuffer() {
|
public RenderBuffer getColorBuffer() {
|
||||||
if (colorBufs.isEmpty())
|
if (colorBufs.isEmpty()) {
|
||||||
return null;
|
return null;
|
||||||
|
}
|
||||||
if (colorBufIndex < 0 || colorBufIndex >= colorBufs.size()) {
|
if (colorBufIndex < 0 || colorBufIndex >= colorBufs.size()) {
|
||||||
return colorBufs.get(0);
|
return colorBufs.get(0);
|
||||||
}
|
}
|
||||||
@ -559,8 +582,9 @@ public class FrameBuffer extends NativeObject {
|
|||||||
String mrtStr = colorBufIndex >= 0 ? "" + colorBufIndex : "mrt";
|
String mrtStr = colorBufIndex >= 0 ? "" + colorBufIndex : "mrt";
|
||||||
sb.append("FrameBuffer[format=").append(width).append("x").append(height)
|
sb.append("FrameBuffer[format=").append(width).append("x").append(height)
|
||||||
.append("x").append(samples).append(", drawBuf=").append(mrtStr).append("]\n");
|
.append("x").append(samples).append(", drawBuf=").append(mrtStr).append("]\n");
|
||||||
if (depthBuf != null)
|
if (depthBuf != null) {
|
||||||
sb.append("Depth => ").append(depthBuf).append("\n");
|
sb.append("Depth => ").append(depthBuf).append("\n");
|
||||||
|
}
|
||||||
for (RenderBuffer colorBuf : colorBufs) {
|
for (RenderBuffer colorBuf : colorBufs) {
|
||||||
sb.append("Color(").append(colorBuf.slot)
|
sb.append("Color(").append(colorBuf.slot)
|
||||||
.append(") => ").append(colorBuf).append("\n");
|
.append(") => ").append(colorBuf).append("\n");
|
||||||
@ -576,8 +600,9 @@ public class FrameBuffer extends NativeObject {
|
|||||||
colorBufs.get(i).resetObject();
|
colorBufs.get(i).resetObject();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (depthBuf != null)
|
if (depthBuf != null) {
|
||||||
depthBuf.resetObject();
|
depthBuf.resetObject();
|
||||||
|
}
|
||||||
|
|
||||||
setUpdateNeeded();
|
setUpdateNeeded();
|
||||||
}
|
}
|
||||||
@ -632,5 +657,4 @@ public class FrameBuffer extends NativeObject {
|
|||||||
public boolean isSrgb() {
|
public boolean isSrgb() {
|
||||||
return srgb;
|
return srgb;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1269,7 +1269,7 @@ public final class BufferUtils {
|
|||||||
* and cleans the direct buffers. However, as this doesn't happen
|
* and cleans the direct buffers. However, as this doesn't happen
|
||||||
* immediately after discarding all references to a direct buffer, it's easy
|
* immediately after discarding all references to a direct buffer, it's easy
|
||||||
* to OutOfMemoryError yourself using direct buffers.
|
* to OutOfMemoryError yourself using direct buffers.
|
||||||
**/
|
*/
|
||||||
public static void destroyDirectBuffer(Buffer toBeDestroyed) {
|
public static void destroyDirectBuffer(Buffer toBeDestroyed) {
|
||||||
if (!isDirect(toBeDestroyed)) {
|
if (!isDirect(toBeDestroyed)) {
|
||||||
return;
|
return;
|
||||||
@ -1318,5 +1318,4 @@ public final class BufferUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2009-2012 jMonkeyEngine
|
* Copyright (c) 2009-2020 jMonkeyEngine
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
Loading…
x
Reference in New Issue
Block a user