<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Scatter3D Simplex Noise - ECHARTS-GL</title>
        <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
        <meta name="apple-mobile-web-app-capable" content="yes">
        <link rel="stylesheet" href="../common/reset.css">
    </head>
    <body>
        <div id="main"></div>
        <script src="../common/echarts.min.js"></script>
        <script src="../common/jquery.min.js"></script>
        <script src="../common/echarts-gl.js"></script>
        <script src="../common/simplex.js"></script>
        <script>
            var chart = echarts.init(document.getElementById('main'));

            var noise = new SimplexNoise(Math.random);
            function generateData(theta, min, max) {
                var data = [];
                for (var i = 0; i <= 30; i++) {
                    for (var j = 0; j <= 30; j++) {
                        for (var k = 0; k <= 30; k++) {
                            var value = noise.noise3D(i / 10, j / 10, k / 10);
                            valMax = Math.max(valMax, value);
                            valMin = Math.min(valMin, value);
                            data.push([i, j, k, value * 2 + 4]);
                        }
                    }
                }
                return data;
            }
            var valMin = Infinity;
            var valMax = -Infinity;
            var data = generateData(2, -5, 5);
            console.log(valMin, valMax);

            chart.setOption({
                tooltip: {},
                visualMap: {
                    show: false,
                    min: 2,
                    max: 6,
                    inRange: {
                        symbolSize: [0.5, 15],
                        color: ['#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026'],
                        colorAlpha: [0.2, 1]
                    }
                },
                xAxis3D: {
                    type: 'value'
                },
                yAxis3D: {
                    type: 'value'
                },
                zAxis3D: {
                    type: 'value'
                },
                grid3D: {
                    axisLine: {
                        lineStyle: { color: '#fff' }
                    },
                    axisPointer: {
                        lineStyle: { color: '#fff' }
                    },
                    viewControl: {
                        autoRotate: true
                    }
                },
                series: [{
                    type: 'scatter3D',
                    data: data
                }]
            });

            window.onresize = chart.resize;
        </script>
    </body>
</html>