@Override public Tile createTile(Sector sector, Level level, int row, int column) { return new TerrainTile(sector, level, row, column); }
if (elevationTimestamp != tile.getHeightTimestamp()) { float[] heights = tile.getHeights(); if (heights == null) { heights = new float[tileWidth * tileHeight]; tile.setHeights(heights); if (verticalExaggeration != tile.getVerticalExaggeration() || elevationTimestamp != tile.getHeightTimestamp()) { Vec3 origin = tile.getOrigin(); float[] heights = tile.getHeights(); float[] points = tile.getPoints(); float borderHeight = (float) (tile.minTerrainElevation * verticalExaggeration); rc.globe.geographicToCartesianGrid(tile.sector, tileWidth, tileHeight, heights, (float) verticalExaggeration, origin, points, rowStride + 3, rowStride); rc.globe.geographicToCartesianBorder(tile.sector, tileWidth + 2, tileHeight + 2, borderHeight, origin, points); tile.setOrigin(origin); tile.setPoints(points); tile.setHeightTimestamp(elevationTimestamp); tile.setVerticalExaggeration(verticalExaggeration);
@Before public void setUp() { // Mock all the static methods in Logger PowerMockito.mockStatic(Logger.class); // Create the globe object used by the test this.globe = new Globe(WorldWind.WGS84_ELLIPSOID, new ProjectionWgs84()); // Create the terrain object used by the test this.terrain = new BasicTerrain(); // Add a terrain tile used to the mocked terrain LevelSet levelSet = new LevelSet(new Sector().setFullSphere(), 1.0, 1, 5, 5); // tiles with 5x5 vertices TerrainTile tile = new TerrainTile(new Sector(0, 0, 1, 1), levelSet.firstLevel(), 90, 180); ((BasicTerrain) this.terrain).addTile(tile); // Populate the terrain tile's geometry int tileWidth = tile.level.tileWidth; int tileHeight = tile.level.tileHeight; int rowStride = (tileWidth + 2) * 3; float[] points = new float[(tileWidth + 2) * (tileHeight + 2) * 3]; Vec3 tileOrigin = this.globe.geographicToCartesian(0.5, 0.5, 0.0, new Vec3()); this.globe.geographicToCartesianGrid(tile.sector, tileWidth, tileHeight, null, 1.0f, tileOrigin, points, rowStride + 3, rowStride); this.globe.geographicToCartesianBorder(tile.sector, tileWidth + 2, tileHeight + 2, 0.0f, tileOrigin, points); tile.setOrigin(tileOrigin); tile.setPoints(points); }
protected void prepareDrawableTerrain(RenderContext rc, TerrainTile tile, BasicDrawableTerrain drawable) { // Assemble the drawable's geographic sector and Cartesian vertex origin. drawable.sector.set(tile.sector); drawable.vertexOrigin.set(tile.origin); // Assemble the drawable's element buffer ranges. drawable.lineElementRange.set(this.levelSetLineElementRange); drawable.triStripElementRange.set(this.levelSetTriStripElementRange); // Assemble the drawable's OpenGL buffer objects. drawable.vertexPoints = tile.getPointBuffer(rc); drawable.vertexTexCoords = this.levelSetVertexTexCoordBuffer; drawable.elements = this.levelSetElementBuffer; }
protected void addTile(RenderContext rc, TerrainTile tile) { // Prepare the terrain tile and add it. this.prepareTile(rc, tile); this.currentTerrain.addTile(tile); // Prepare a drawable for the terrain tile for processing on the OpenGL thread. Pool<BasicDrawableTerrain> pool = rc.getDrawablePool(BasicDrawableTerrain.class); BasicDrawableTerrain drawable = BasicDrawableTerrain.obtain(pool); this.prepareDrawableTerrain(rc, tile, drawable); rc.offerDrawableTerrain(drawable, tile.getDistanceToCamera()); }