<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <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>
            var chart = echarts.init(document.getElementById('main'));

            chart.setOption({
                visualMap: {
                    show: false,
                    dimension: 2,
                    min: -1,
                    max: 1,
                    inRange: {
                        color: ['#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026']
                    }
                },
                xAxis3D: {
                    type: 'value'
                },
                yAxis3D: {
                    type: 'value'
                },
                zAxis3D: {
                    type: 'value'
                },
                grid3D: {
                    axisPointer: {
                        lineStyle: {
                            color: '#fff'
                        }
                    },
                    axisLine: {
                        lineStyle: {
                            color: '#fff'
                        }
                    },
                    viewControl: {
                        damping: 0.95
                        // projection: 'orthographic'
                    }
                },
                series: [{
                    type: 'surface',
                    parametric: true,
                    // shading: 'albedo',
                    parametricEquation: {
                        u: {
                            min: -Math.PI,
                            max: Math.PI,
                            step: Math.PI / 20
                        },
                        v: {
                            min: 0,
                            max: Math.PI,
                            step: Math.PI / 20
                        },
                        x: function (u, v) {
                            return Math.sin(v) * Math.sin(u);
                        },
                        y: function (u, v) {
                            return Math.sin(v) * Math.cos(u);
                        },
                        z: function (u, v) {
                            return Math.cos(v);
                        }
                    }
                }]
            });

            window.addEventListener('resize', function () {
                chart.resize();
            });

        </script>
    </body>
</html>