Android Open Source - droidengine2d Rectangle Batch Geometry






From Project

Back to project page droidengine2d.

License

The source code is released under:

Apache License

If you think the Android project droidengine2d listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*   Copyright 2013-2014 Miguel Vicente Linares
 *//w ww.  j  a v  a  2 s. c o m
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */
package com.miviclin.droidengine2d.graphics.mesh;

import android.opengl.Matrix;

import com.miviclin.droidengine2d.graphics.cameras.Camera;
import com.miviclin.droidengine2d.util.TransformUtilities;
import com.miviclin.droidengine2d.util.math.Matrix4;
import com.miviclin.droidengine2d.util.math.Vector2;

/**
 * This class defines the geometry of the mesh used to render a batch of rectangles.
 * 
 * @author Miguel Vicente Linares
 * 
 */
public class RectangleBatchGeometry extends Geometry {

  protected final float[] temp = new float[16];

  private float[] mvpIndices;
  private float[] mvpMatrices;
  private Matrix4 modelMatrix;

  /**
   * Constructor.
   * 
   * @param batchCapacity Max number of elements of the batch.
   * @param usesColors true if the geometry stores colors, false otherwise.
   * @param usesTexturesUV true if the geometry stores texture coordinates, false otherwise.
   */
  public RectangleBatchGeometry(int batchCapacity, boolean usesColors, boolean usesTexturesUV) {
    super(batchCapacity * 4, batchCapacity * 6, usesColors, usesTexturesUV);
    this.mvpIndices = new float[batchCapacity * 4];
    this.mvpMatrices = new float[batchCapacity * 16];
    this.modelMatrix = new Matrix4();

    setupMVPIndices();
  }

  /**
   * Initializes the array of indices of the array of MVP matrices. This array is used in the vertex shader.
   */
  private void setupMVPIndices() {
    float value = 0.0f;
    for (int i = 0; i < mvpIndices.length; i++) {
      if ((i != 0) && (i % 4 == 0)) {
        value += 1.0f;
      }
      mvpIndices[i] = value;
    }
  }

  /**
   * Transforms the MVP matrix located at the specified index with the especified position, scale and rotation.
   * 
   * @param batchIndex Index of the array of MVP matrices where the matrix is located.
   * @param position Position.
   * @param scale Scale.
   * @param rotation Rotation angle around the origin.
   * @param camera Camera.
   */
  public void updateMVPMatrix(int batchIndex, Vector2 position, Vector2 scale, float rotation, Camera camera) {
    int mvpOffset;
    float tx = position.getX();
    float ty = position.getY();

    if (rotation != 0) {
      TransformUtilities.transform2D(modelMatrix, tx, ty, rotation, scale.getX(), scale.getY());
    } else {
      TransformUtilities.transform2D(modelMatrix, tx, ty, scale.getX(), scale.getY());
    }
    mvpOffset = batchIndex * 16;
    Matrix.multiplyMM(temp, 0, camera.getViewMatrix().getValues(), 0, modelMatrix.getValues(), 0);
    Matrix.multiplyMM(mvpMatrices, mvpOffset, camera.getProjectionMatrix().getValues(), 0, temp, 0);
  }

  /**
   * Returns the array of indices of the array of MVP matrices.
   * 
   * @return Array of indices of the array of MVP matrices.
   */
  public float[] getMvpIndices() {
    return mvpIndices;
  }

  /**
   * Sets the array of indices of the array of MVP matrices.
   * 
   * @param mvpIndices New array of indices.
   */
  public void setMvpIndices(float[] mvpIndices) {
    this.mvpIndices = mvpIndices;
  }

  /**
   * Returns the array of MVP matrices. All matrices are stored in the same array. Each block of 16 numbers is a 4x4
   * matrix.
   * 
   * @return Array of MVP matrices
   */
  public float[] getMvpMatrices() {
    return mvpMatrices;
  }
}




Java Source Code List

com.miviclin.droidengine2d.AbstractGame.java
com.miviclin.droidengine2d.EngineActivity.java
com.miviclin.droidengine2d.EngineLock.java
com.miviclin.droidengine2d.Engine.java
com.miviclin.droidengine2d.GameThread.java
com.miviclin.droidengine2d.Game.java
com.miviclin.droidengine2d.audio.MusicPlayer.java
com.miviclin.droidengine2d.audio.SoundManager.java
com.miviclin.droidengine2d.gamestate.GameStateAdapter.java
com.miviclin.droidengine2d.gamestate.GameStateManager.java
com.miviclin.droidengine2d.gamestate.GameStateNotRegisteredException.java
com.miviclin.droidengine2d.gamestate.GameState.java
com.miviclin.droidengine2d.gamestate.OnGameStateChangeListener.java
com.miviclin.droidengine2d.graphics.Color.java
com.miviclin.droidengine2d.graphics.DefaultRenderer.java
com.miviclin.droidengine2d.graphics.EngineRenderer.java
com.miviclin.droidengine2d.graphics.GLDebugger.java
com.miviclin.droidengine2d.graphics.GLRenderer.java
com.miviclin.droidengine2d.graphics.GLView.java
com.miviclin.droidengine2d.graphics.Graphics.java
com.miviclin.droidengine2d.graphics.animation.AnimationFrame.java
com.miviclin.droidengine2d.graphics.animation.AnimationStateAdapter.java
com.miviclin.droidengine2d.graphics.animation.AnimationStateListener.java
com.miviclin.droidengine2d.graphics.animation.Animation.java
com.miviclin.droidengine2d.graphics.cameras.Camera.java
com.miviclin.droidengine2d.graphics.cameras.OrthographicCamera.java
com.miviclin.droidengine2d.graphics.material.BlendingOptions.java
com.miviclin.droidengine2d.graphics.material.ColorMaterial.java
com.miviclin.droidengine2d.graphics.material.Material.java
com.miviclin.droidengine2d.graphics.material.TextureColorMaterial.java
com.miviclin.droidengine2d.graphics.material.TextureHsvMaterial.java
com.miviclin.droidengine2d.graphics.material.TextureMaterial.java
com.miviclin.droidengine2d.graphics.material.TransparentTextureMaterial.java
com.miviclin.droidengine2d.graphics.material.UnsupportedMaterialException.java
com.miviclin.droidengine2d.graphics.mesh.ColorMaterialBatchRenderer.java
com.miviclin.droidengine2d.graphics.mesh.Geometry.java
com.miviclin.droidengine2d.graphics.mesh.GraphicsBatchRenderer.java
com.miviclin.droidengine2d.graphics.mesh.RectangleBatchGeometry.java
com.miviclin.droidengine2d.graphics.mesh.RectangleBatchRenderer.java
com.miviclin.droidengine2d.graphics.mesh.TextureColorMaterialBatchRenderer.java
com.miviclin.droidengine2d.graphics.mesh.TextureHsvMaterialBatchRenderer.java
com.miviclin.droidengine2d.graphics.mesh.TextureMaterialBatchRendererBase.java
com.miviclin.droidengine2d.graphics.mesh.TextureMaterialBatchRenderer.java
com.miviclin.droidengine2d.graphics.mesh.TransparentTextureMaterialBatchRenderer.java
com.miviclin.droidengine2d.graphics.shader.ShaderProgramException.java
com.miviclin.droidengine2d.graphics.shader.ShaderProgram.java
com.miviclin.droidengine2d.graphics.shader.ShaderVars.java
com.miviclin.droidengine2d.graphics.text.BitmapFont.java
com.miviclin.droidengine2d.graphics.text.FontChar.java
com.miviclin.droidengine2d.graphics.text.Font.java
com.miviclin.droidengine2d.graphics.text.UndefinedCharacterException.java
com.miviclin.droidengine2d.graphics.texture.TextureAtlas.java
com.miviclin.droidengine2d.graphics.texture.TextureManager.java
com.miviclin.droidengine2d.graphics.texture.TexturePackerAtlas.java
com.miviclin.droidengine2d.graphics.texture.TextureRegion.java
com.miviclin.droidengine2d.graphics.texture.Texture.java
com.miviclin.droidengine2d.input.DefaultKeyEventProcessor.java
com.miviclin.droidengine2d.input.GameInputManager.java
com.miviclin.droidengine2d.input.GameStateInputManager.java
com.miviclin.droidengine2d.input.KeyEventInfo.java
com.miviclin.droidengine2d.input.KeyEventProcessor.java
com.miviclin.droidengine2d.input.KeyProcessor.java
com.miviclin.droidengine2d.input.MotionEventProcessor.java
com.miviclin.droidengine2d.input.TouchProcessor.java
com.miviclin.droidengine2d.input.sensor.AccelerometerValuesListener.java
com.miviclin.droidengine2d.input.sensor.Accelerometer.java
com.miviclin.droidengine2d.input.sensor.SensorUtilities.java
com.miviclin.droidengine2d.resources.AssetsLoader.java
com.miviclin.droidengine2d.util.ActivityUtilities.java
com.miviclin.droidengine2d.util.MutexLock.java
com.miviclin.droidengine2d.util.PrimitiveTypeSize.java
com.miviclin.droidengine2d.util.TransformUtilities.java
com.miviclin.droidengine2d.util.Transform.java
com.miviclin.droidengine2d.util.math.Matrix4.java
com.miviclin.droidengine2d.util.math.MatrixFix.java
com.miviclin.droidengine2d.util.math.Vector2.java
com.miviclin.droidengine2d.util.math.Vector3.java
com.miviclin.droidengine2d.util.time.TimeConstants.java
com.miviclin.droidengine2d.util.time.TimeCounter.java