예제 #1
0
 /**
  * Indicates whether this element is enabled in the given default state for a particular action.
  */
 public static boolean isEnabled(State state) {
   return (state.getDefaults().getElement(index) != null);
 }
예제 #2
0
 /** Returns the instance of this element in the passed State. */
 public static ModelMatrixElement getInstance(State state) {
   return (ModelMatrixElement) state.getElement(index);
 }
예제 #3
0
 /** Enables this element in the passed state, which should be the default for a given action. */
 public static void enable(State defaultState) {
   Element tmp = new ModelMatrixElement();
   defaultState.setElement(tmp.getStateIndex(), tmp);
 }
예제 #4
0
/** Represents the model matrix, which is the transformation applied to objects in the scene. */
public class ModelMatrixElement extends Element {
  // Boilerplate
  private static StateIndex index = State.registerElementType();

  public StateIndex getStateIndex() {
    return index;
  }

  public Element newInstance() {
    return new ModelMatrixElement();
  }
  /** Returns the instance of this element in the passed State. */
  public static ModelMatrixElement getInstance(State state) {
    return (ModelMatrixElement) state.getElement(index);
  }
  /** Enables this element in the passed state, which should be the default for a given action. */
  public static void enable(State defaultState) {
    Element tmp = new ModelMatrixElement();
    defaultState.setElement(tmp.getStateIndex(), tmp);
  }
  /**
   * Indicates whether this element is enabled in the given default state for a particular action.
   */
  public static boolean isEnabled(State state) {
    return (state.getDefaults().getElement(index) != null);
  }

  // The matrix data
  protected Mat4f matrix;
  protected Mat4f temp = new Mat4f();

  public ModelMatrixElement() {
    matrix = new Mat4f();
    matrix.makeIdent();
  }

  public void push(State state) {
    ModelMatrixElement prev = (ModelMatrixElement) getNextInStack();
    if (prev != null) {
      matrix.set(prev.matrix);
    }
  }

  /**
   * Returns the current model matrix; callers should not mutate this directly but instead use the
   * accessor methods to change it.
   */
  public Mat4f getMatrix() {
    return matrix;
  }

  /** Sets the current element to the identity matrix. */
  public static void makeIdent(State state) {
    ModelMatrixElement elt = getInstance(state);
    elt.makeEltIdent();
  }

  /** Sets this element to the identity matrix. */
  public void makeEltIdent() {
    matrix.makeIdent();
  }

  /** Multiplies the current element by the given matrix. */
  public static void mult(State state, Mat4f matrix) {
    ModelMatrixElement elt = getInstance(state);
    elt.multElt(matrix);
  }

  /** Multiplies this element by the given matrix. */
  public void multElt(Mat4f matrix) {
    temp.set(this.matrix);
    this.matrix.mul(temp, matrix);
  }
}