Package com.ardor3d.extension.terrain.providers.inmemory

Source Code of com.ardor3d.extension.terrain.providers.inmemory.InMemoryTerrainDataProvider

/**
* Copyright (c) 2008-2012 Ardor Labs, Inc.
*
* This file is part of Ardor3D.
*
* Ardor3D is free software: you can redistribute it and/or modify it
* under the terms of its license which may be found in the accompanying
* LICENSE file or at <http://www.ardor3d.com/LICENSE>.
*/

package com.ardor3d.extension.terrain.providers.inmemory;

import java.util.List;
import java.util.Map;

import com.ardor3d.extension.terrain.client.TerrainDataProvider;
import com.ardor3d.extension.terrain.client.TerrainSource;
import com.ardor3d.extension.terrain.client.TextureSource;
import com.ardor3d.extension.terrain.providers.image.ImageTextureSource;
import com.ardor3d.extension.terrain.providers.inmemory.data.InMemoryTerrainData;
import com.ardor3d.extension.terrain.util.NormalMapUtil;
import com.ardor3d.image.Image;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;

public class InMemoryTerrainDataProvider implements TerrainDataProvider {
    private static final int tileSize = 128;
    private final InMemoryTerrainData inMemoryTerrainData;

    private boolean generateNormalMap;

    public InMemoryTerrainDataProvider(final InMemoryTerrainData inMemoryTerrainData) {
        this(inMemoryTerrainData, false);
    }

    public InMemoryTerrainDataProvider(final InMemoryTerrainData inMemoryTerrainData, final boolean generateNormalMap) {
        this.inMemoryTerrainData = inMemoryTerrainData;
        this.generateNormalMap = generateNormalMap;
    }

    @Override
    public Map<Integer, String> getAvailableMaps() throws Exception {
        final Map<Integer, String> maps = Maps.newHashMap();
        maps.put(0, "InMemoryData");

        return maps;
    }

    @Override
    public TerrainSource getTerrainSource(final int mapId) {
        return new InMemoryTerrainSource(tileSize, inMemoryTerrainData);
    }

    @Override
    public TextureSource getTextureSource(final int mapId) {
        return new InMemoryTextureSource(tileSize, inMemoryTerrainData);
    }

    @Override
    public TextureSource getNormalMapSource(final int mapId) {
        if (generateNormalMap) {
            try {
                final Image normalImage = NormalMapUtil.constructNormalMap(inMemoryTerrainData.getHeightData(),
                        inMemoryTerrainData.getSide(), inMemoryTerrainData.getMaxHeight(), inMemoryTerrainData
                                .getScale().getX(), inMemoryTerrainData.getScale().getY());

                final List<Integer> heightMapSizes = Lists.newArrayList();
                int currentSize = inMemoryTerrainData.getSide();
                heightMapSizes.add(currentSize);
                for (int i = 0; i < inMemoryTerrainData.getClipmapLevels(); i++) {
                    currentSize /= 2;
                    heightMapSizes.add(currentSize);
                }
                return new ImageTextureSource(tileSize, normalImage, heightMapSizes);
            } catch (final Exception e) {
                e.printStackTrace();
            }
        }
        return null;
    }

    public boolean isGenerateNormalMap() {
        return generateNormalMap;
    }

    public void setGenerateNormalMap(final boolean generateNormalMap) {
        this.generateNormalMap = generateNormalMap;
    }
}
TOP

Related Classes of com.ardor3d.extension.terrain.providers.inmemory.InMemoryTerrainDataProvider

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.