* Fix javadoc error in Transform.loadIdentity()

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@9220 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
3.0
Sha..om 13 years ago
parent be7a22e3d5
commit 9ddb941daa
  1. 636
      engine/src/core/com/jme3/math/Transform.java

@ -1,318 +1,318 @@
/* /*
* Copyright (c) 2009-2010 jMonkeyEngine * Copyright (c) 2009-2010 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
* modification, are permitted provided that the following conditions are * modification, are permitted provided that the following conditions are
* met: * met:
* *
* * Redistributions of source code must retain the above copyright * * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer. * notice, this list of conditions and the following disclaimer.
* *
* * Redistributions in binary form must reproduce the above copyright * * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* *
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors * * Neither the name of 'jMonkeyEngine' nor the names of its contributors
* may be used to endorse or promote products derived from this software * may be used to endorse or promote products derived from this software
* without specific prior written permission. * without specific prior written permission.
* *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* 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.*;
import java.io.IOException; import java.io.IOException;
/** /**
* Started Date: Jul 16, 2004<br><br> * Started Date: Jul 16, 2004<br><br>
* Represents a translation, rotation and scale in one object. * Represents a translation, rotation and scale in one object.
* *
* @author Jack Lindamood * @author Jack Lindamood
* @author Joshua Slack * @author Joshua Slack
*/ */
public final class Transform implements Savable, Cloneable, java.io.Serializable { public final class Transform implements Savable, Cloneable, java.io.Serializable {
static final long serialVersionUID = 1; static final long serialVersionUID = 1;
public static final Transform IDENTITY = new Transform(); public static final Transform IDENTITY = new Transform();
private Quaternion rot = new Quaternion(); private Quaternion rot = new Quaternion();
private Vector3f translation = new Vector3f(); private Vector3f translation = new Vector3f();
private Vector3f scale = new Vector3f(1,1,1); private Vector3f scale = new Vector3f(1,1,1);
public Transform(Vector3f translation, Quaternion rot){ public Transform(Vector3f translation, Quaternion rot){
this.translation.set(translation); this.translation.set(translation);
this.rot.set(rot); this.rot.set(rot);
} }
public Transform(Vector3f translation, Quaternion rot, Vector3f scale){ public Transform(Vector3f translation, Quaternion rot, Vector3f scale){
this(translation, rot); this(translation, rot);
this.scale.set(scale); this.scale.set(scale);
} }
public Transform(Vector3f translation){ public Transform(Vector3f translation){
this(translation, Quaternion.IDENTITY); this(translation, Quaternion.IDENTITY);
} }
public Transform(Quaternion rot){ public Transform(Quaternion rot){
this(Vector3f.ZERO, rot); this(Vector3f.ZERO, rot);
} }
public Transform(){ public Transform(){
this(Vector3f.ZERO, Quaternion.IDENTITY); this(Vector3f.ZERO, Quaternion.IDENTITY);
} }
/** /**
* 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
*/ */
public Transform setRotation(Quaternion rot) { public Transform setRotation(Quaternion rot) {
this.rot.set(rot); this.rot.set(rot);
return this; return this;
} }
/** /**
* 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
*/ */
public Transform setTranslation(Vector3f trans) { public Transform setTranslation(Vector3f trans) {
this.translation.set(trans); this.translation.set(trans);
return this; return this;
} }
/** /**
* 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() {
return translation; return translation;
} }
/** /**
* 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
*/ */
public Transform setScale(Vector3f scale) { public Transform setScale(Vector3f scale) {
this.scale.set(scale); this.scale.set(scale);
return this; return this;
} }
/** /**
* 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
*/ */
public Transform setScale(float scale) { public Transform setScale(float scale) {
this.scale.set(scale, scale, scale); this.scale.set(scale, scale, scale);
return this; return this;
} }
/** /**
* 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() {
return scale; return scale;
} }
/** /**
* 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, a new vector3f is created to
* hold the value. The value, once stored, is returned. * 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 new Quaternion is created to
* hold the value. The value, once stored, is returned. * 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() {
return rot; return rot;
} }
/** /**
* 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 vector3f is created to
* hold the value. The value, once stored, is returned. * 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 matrix to the interpolation between the first matrix and the second by delta amount. * Sets this matrix to the interpolation between the first matrix and the second by delta amount.
* @param t1 The begining transform. * @param t1 The begining 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) {
this.rot.slerp(t1.rot,t2.rot,delta); this.rot.slerp(t1.rot,t2.rot,delta);
this.translation.interpolate(t1.translation,t2.translation,delta); this.translation.interpolate(t1.translation,t2.translation,delta);
this.scale.interpolate(t1.scale,t2.scale,delta); this.scale.interpolate(t1.scale,t2.scale,delta);
} }
/** /**
* Changes the values of this matrix acording to it's parent. Very similar to the concept of Node/Spatial transforms. * Changes the values of this matrix acording to it's 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.
*/ */
public Transform combineWithParent(Transform parent) { public Transform combineWithParent(Transform parent) {
scale.multLocal(parent.scale); scale.multLocal(parent.scale);
// rot.multLocal(parent.rot); // rot.multLocal(parent.rot);
parent.rot.mult(rot, rot); parent.rot.mult(rot, rot);
// This here, is evil code // This here, is evil code
// parent // parent
// .rot // .rot
// .multLocal(translation) // .multLocal(translation)
// .multLocal(parent.scale) // .multLocal(parent.scale)
// .addLocal(parent.translation); // .addLocal(parent.translation);
translation.multLocal(parent.scale); translation.multLocal(parent.scale);
parent parent
.rot .rot
.multLocal(translation) .multLocal(translation)
.addLocal(parent.translation); .addLocal(parent.translation);
return this; return this;
} }
/** /**
* 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.
* @return this * @return this
*/ */
public Transform setTranslation(float x,float y, float z) { public Transform setTranslation(float x,float y, float z) {
translation.set(x,y,z); translation.set(x,y,z);
return this; return this;
} }
/** /**
* 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.
* @return this * @return this
*/ */
public Transform setScale(float x, float y, float z) { public Transform setScale(float x, float y, float z) {
scale.set(x,y,z); scale.set(x,y,z);
return this; return this;
} }
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)
return rot.mult(store.set(in).multLocal(scale), store).addLocal(translation); return rot.mult(store.set(in).multLocal(scale), store).addLocal(translation);
} }
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 didnt .. // But for some reason, they didnt ..
// 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);
return store; return store;
} }
/** /**
* Loads the identity. Equal to translation=1,1,1 scale=0,0,0 rot=0,0,0,1. * Loads the identity. Equal to translation=0,0,0 scale=1,1,1 rot=0,0,0,1.
*/ */
public void loadIdentity() { public void loadIdentity() {
translation.set(0,0,0); translation.set(0,0,0);
scale.set(1,1,1); scale.set(1,1,1);
rot.set(0,0,0,1); rot.set(0,0,0,1);
} }
@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
*/ */
public Transform set(Transform matrixQuat) { public Transform set(Transform matrixQuat) {
this.translation.set(matrixQuat.translation); this.translation.set(matrixQuat.translation);
this.rot.set(matrixQuat.rot); this.rot.set(matrixQuat.rot);
this.scale.set(matrixQuat.scale); this.scale.set(matrixQuat.scale);
return this; return this;
} }
public void write(JmeExporter e) throws IOException { public void write(JmeExporter e) throws IOException {
OutputCapsule capsule = e.getCapsule(this); OutputCapsule capsule = e.getCapsule(this);
capsule.write(rot, "rot", new Quaternion()); capsule.write(rot, "rot", new Quaternion());
capsule.write(translation, "translation", Vector3f.ZERO); capsule.write(translation, "translation", Vector3f.ZERO);
capsule.write(scale, "scale", Vector3f.UNIT_XYZ); capsule.write(scale, "scale", Vector3f.UNIT_XYZ);
} }
public void read(JmeImporter e) throws IOException { public void read(JmeImporter e) throws IOException {
InputCapsule capsule = e.getCapsule(this); InputCapsule capsule = e.getCapsule(this);
rot = (Quaternion)capsule.readSavable("rot", new Quaternion()); rot = (Quaternion)capsule.readSavable("rot", new Quaternion());
translation = (Vector3f)capsule.readSavable("translation", Vector3f.ZERO); translation = (Vector3f)capsule.readSavable("translation", Vector3f.ZERO);
scale = (Vector3f)capsule.readSavable("scale", Vector3f.UNIT_XYZ); scale = (Vector3f)capsule.readSavable("scale", Vector3f.UNIT_XYZ);
} }
@Override @Override
public Transform clone() { public Transform clone() {
try { try {
Transform tq = (Transform) super.clone(); Transform tq = (Transform) super.clone();
tq.rot = rot.clone(); tq.rot = rot.clone();
tq.scale = scale.clone(); tq.scale = scale.clone();
tq.translation = translation.clone(); tq.translation = translation.clone();
return tq; return tq;
} catch (CloneNotSupportedException e) { } catch (CloneNotSupportedException e) {
throw new AssertionError(); throw new AssertionError();
} }
} }
} }

Loading…
Cancel
Save