Android Open Source - geoar-app Height Map Feature






From Project

Back to project page geoar-app.

License

The source code is released under:

Apache License

If you think the Android project geoar-app 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 2012 52North Initiative for Geospatial Open Source Software GmbH
 */* w  w  w .j a  va  2 s .co  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 org.n52.geoar.view.geoar.gl.mode.features;

import org.n52.geoar.view.geoar.gl.mode.BilligerColorShader;
import org.n52.geoar.view.geoar.gl.mode.FeatureShader;
import org.n52.geoar.view.geoar.gl.mode.RenderFeature2;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import android.opengl.GLES20;
import android.opengl.Matrix;

public class HeightMapFeature extends RenderFeature2 {

  
  static final int SIZE_PER_SIDE = 64;
  static final float MIN_POSITION = -10f;
  static final float POSITION_RANGE = 20f;

  private static final int POSITION_DATA_SIZE_IN_ELEMENTS = 3;
  private static final int NORMAL_DATA_SIZE_IN_ELEMENTS = 3;
  private static final int COLOR_DATA_SIZE_IN_ELEMENTS = 4;

  private static final Logger LOG = LoggerFactory
      .getLogger(HeightMapFeature.class);

  public HeightMapFeature() {
    this(BilligerColorShader.getInstance());
  }

  public HeightMapFeature(FeatureShader renderer) {
    this.renderer = renderer;
    this.drawingMode = GLES20.GL_TRIANGLE_STRIP;
  }

  @Override
  public void setOpenGLPreRenderingSettings() {
    // TODO Auto-generated method stub

  }

  @Override
  public void onPreRender() {
    // TODO Auto-generated method stub

  }

  @Override
  public void onCreateInGLESThread() {
    try {
      final int floatsPerVertex = POSITION_DATA_SIZE_IN_ELEMENTS; // +
      // NORMAL_DATA_SIZE_IN_ELEMENTS
      // + COLOR_DATA_SIZE_IN_ELEMENTS;
      final int floatsPerColor = COLOR_DATA_SIZE_IN_ELEMENTS;
      final int floatsPerNormal = NORMAL_DATA_SIZE_IN_ELEMENTS;
      final int xLength = SIZE_PER_SIDE;
      final int yLength = SIZE_PER_SIDE;

      final float[] vertices = new float[xLength * yLength
          * floatsPerVertex];
      final float[] colors = new float[xLength * yLength * floatsPerColor];
      final float[] normals = new float[xLength * yLength
          * floatsPerNormal];

      int indexCount;
      int offset = 0;
      int colorOffset = 0;
      int normalOffSet = 0;

      // First, build the data for the vertex buffer
      for (int y = 0; y < yLength; y++) {
        for (int x = 0; x < xLength; x++) {
          final float xRatio = x / (float) (xLength - 1);

          // Build our heightmap from the top down, so that our
          // triangles are counter-clockwise.
          final float yRatio = 1f - (y / (float) (yLength - 1));

          final float xPosition = MIN_POSITION
              + (xRatio * POSITION_RANGE);
          final float yPosition = MIN_POSITION
              + (yRatio * POSITION_RANGE);

          vertices[offset++] = xPosition;

          vertices[offset++] = ((xPosition * xPosition) + (yPosition * yPosition)) / 20f;
          vertices[offset++] = yPosition;

          final float xSlope = (2 * xPosition) / 10f;
          final float ySlope = (2 * yPosition) / 10f;

          // Calculate the normal using the cross product of the
          // slopes.
          final float[] planeVectorX = { 1f, 0f, xSlope };
          final float[] planeVectorY = { 0f, 1f, ySlope };
          final float[] normalVector = {
              (planeVectorX[1] * planeVectorY[2])
                  - (planeVectorX[2] * planeVectorY[1]),
              (planeVectorX[2] * planeVectorY[0])
                  - (planeVectorX[0] * planeVectorY[2]),
              (planeVectorX[0] * planeVectorY[1])
                  - (planeVectorX[1] * planeVectorY[0]) };

          // Normalize the normal
          final float length = Matrix.length(normalVector[0],
              normalVector[1], normalVector[2]);

          normals[normalOffSet++] = normalVector[0] / length;
          normals[normalOffSet++] = normalVector[1] / length;
          normals[normalOffSet++] = normalVector[2] / length;

          colors[colorOffset++] = xRatio;
          colors[colorOffset++] = yRatio;
          colors[colorOffset++] = 0.5f;
          colors[colorOffset++] = 0.5f;
        }
      }
      // Now build the index data
      final int numStripsRequired = yLength - 1;
      final int numDegensRequired = 2 * (numStripsRequired - 1);
      final int verticesPerStrip = 2 * xLength;

      final short[] heightMapIndexData = new short[(verticesPerStrip * numStripsRequired)
          + numDegensRequired];

      offset = 0;

      for (int y = 0; y < yLength - 1; y++) {
        if (y > 0) {
          // Degenerate begin: repeat first vertex
          heightMapIndexData[offset++] = (short) (y * yLength);
        }

        for (int x = 0; x < xLength; x++) {
          // One part of the strip
          heightMapIndexData[offset++] = (short) ((y * yLength) + x);
          heightMapIndexData[offset++] = (short) (((y + 1) * yLength) + x);
        }

        if (y < yLength - 2) {
          // Degenerate end: repeat last vertex
          heightMapIndexData[offset++] = (short) (((y + 1) * yLength) + (xLength - 1));
        }
      }

      indexCount = heightMapIndexData.length;

      setRenderObjectives(vertices, colors, normals, null,
          heightMapIndexData);
    } catch (Throwable t) {
      LOG.debug("Unknown error", t);
    }
  }
}




Java Source Code List

.DataSourcesOverlay.java
.VisualizationOverlayItem.java
org.n52.geoar.AboutDialog.java
org.n52.geoar.DataSourceListAdapter.java
org.n52.geoar.GeoARActivity.java
org.n52.geoar.GeoARApplication.java
org.n52.geoar.ar.view.ARFragment.java
org.n52.geoar.ar.view.ARObject.java
org.n52.geoar.ar.view.ARView.java
org.n52.geoar.ar.view.DataSourceVisualizationHandler.java
org.n52.geoar.ar.view.IntroController.java
org.n52.geoar.ar.view.IntroViewer.java
org.n52.geoar.ar.view.gl.ARSurfaceViewRenderer.java
org.n52.geoar.ar.view.gl.ARSurfaceView.java
org.n52.geoar.ar.view.gl.GLESCamera.java
org.n52.geoar.ar.view.gl.MultisampleConfigs.java
org.n52.geoar.ar.view.gl.SurfaceTopology.java
org.n52.geoar.ar.view.overlay.ARCanvasSurfaceView.java
org.n52.geoar.ar.view.overlay.GUIDrawable.java
org.n52.geoar.ar.view.overlay.Radar.java
org.n52.geoar.exception.UnsupportedGeometryType.java
org.n52.geoar.map.view.DataSourceOverlayHandler.java
org.n52.geoar.map.view.GeoARMapView.java
org.n52.geoar.map.view.MapActivityContext.java
org.n52.geoar.map.view.MapFragment.java
org.n52.geoar.map.view.overlay.DataSourceOverlay.java
org.n52.geoar.map.view.overlay.DataSourcePointOverlay.java
org.n52.geoar.map.view.overlay.DataSourcePolygonOverlay.java
org.n52.geoar.map.view.overlay.DataSourcePolylineOverlay.java
org.n52.geoar.map.view.overlay.DataSourcesOverlay.java
org.n52.geoar.map.view.overlay.OverlayType.java
org.n52.geoar.map.view.overlay.PointOverlayType.java
org.n52.geoar.map.view.overlay.PolygonOverlayType.java
org.n52.geoar.map.view.overlay.PolylineOverlayType.java
org.n52.geoar.newdata.CheckList.java
org.n52.geoar.newdata.DataCache.java
org.n52.geoar.newdata.DataSourceHolder.java
org.n52.geoar.newdata.DataSourceInstanceHolder.java
org.n52.geoar.newdata.DataSourceInstanceSettingsDialogActivity.java
org.n52.geoar.newdata.InstalledPluginHolder.java
org.n52.geoar.newdata.PluginActivityContext.java
org.n52.geoar.newdata.PluginContext.java
org.n52.geoar.newdata.PluginDialogFragment.java
org.n52.geoar.newdata.PluginDownloadHolder.java
org.n52.geoar.newdata.PluginDownloader.java
org.n52.geoar.newdata.PluginFragment.java
org.n52.geoar.newdata.PluginGridAdapter.java
org.n52.geoar.newdata.PluginHolder.java
org.n52.geoar.newdata.PluginLoader.java
org.n52.geoar.newdata.PluginLogger.java
org.n52.geoar.newdata.PluginStateInputStream.java
org.n52.geoar.newdata.Tile.java
org.n52.geoar.settings.DateTimeSettingsViewField.java
org.n52.geoar.settings.DateUtils.java
org.n52.geoar.settings.NumberSettingsViewField.java
org.n52.geoar.settings.SettingsException.java
org.n52.geoar.settings.SettingsHelper.java
org.n52.geoar.settings.SettingsViewField.java
org.n52.geoar.settings.SettingsView.java
org.n52.geoar.settings.SpinnerSettingsViewField.java
org.n52.geoar.settings.StringSettingsViewField.java
org.n52.geoar.tracking.camera.CameraView.java
org.n52.geoar.tracking.camera.RealityCamera.java
org.n52.geoar.tracking.location.AdaptiveLowPassSensorBuffer.java
org.n52.geoar.tracking.location.LocationHandler.java
org.n52.geoar.tracking.location.LowPassSensorBuffer.java
org.n52.geoar.tracking.location.MeanSensorBuffer.java
org.n52.geoar.tracking.location.SensorBuffer.java
org.n52.geoar.view.InfoView.java
org.n52.geoar.view.geoar.CalibrationControlView.java
org.n52.geoar.view.geoar.Settings.java
org.n52.geoar.view.geoar.gl.mode.BilligerColorShader.java
org.n52.geoar.view.geoar.gl.mode.BilligerLightShader.java
org.n52.geoar.view.geoar.gl.mode.BilligerTextureShader.java
org.n52.geoar.view.geoar.gl.mode.BoundingBox.java
org.n52.geoar.view.geoar.gl.mode.FeatureShader.java
org.n52.geoar.view.geoar.gl.mode.PhongFeatureShader.java
org.n52.geoar.view.geoar.gl.mode.RenderFeature2.java
org.n52.geoar.view.geoar.gl.mode.Spatial.java
org.n52.geoar.view.geoar.gl.mode.TextureFeatureShader.java
org.n52.geoar.view.geoar.gl.mode.Texture.java
org.n52.geoar.view.geoar.gl.mode.features.CubeFeature2.java
org.n52.geoar.view.geoar.gl.mode.features.FlatCircleFeature.java
org.n52.geoar.view.geoar.gl.mode.features.HeightMapFeature.java
org.n52.geoar.view.geoar.gl.mode.features.NewGridFeature.java
org.n52.geoar.view.geoar.gl.mode.features.ReferencedGridFeature.java
org.n52.geoar.view.geoar.gl.mode.features.SphereFeature.java
org.n52.geoar.view.geoar.gl.mode.features.TriangleFeature.java