/*
title: 皮革材质
category: surface
titleCN: 皮革材质
scripts: 'http://echarts.baidu.com/resource/echarts-gl-latest/dist/echarts-gl.min.js'
*/

var TILING = [4, 2];

var heightImg = new Image();
heightImg.onload = update;
heightImg.src = ROOT_PATH + '/data-gl/asset/leather/leather_height.jpg';

function update() {
    var canvas = document.createElement('canvas');
    var ctx = canvas.getContext('2d');
    var width = canvas.width = heightImg.width;
    var height = canvas.height = heightImg.height;
    ctx.drawImage(heightImg, 0, 0, width, height);
    var imgData = ctx.getImageData(0, 0, width, height).data;

    function getScale(u, v) {
        u = (u / Math.PI * 0.5 + 0.5) * TILING[0];
        v = v / Math.PI * TILING[1];

        u = Math.floor((u - Math.floor(u)) * (width - 1));
        v = Math.floor((1 - v + Math.floor(v)) * (height - 1));

        var idx = v * width + u;
        return 1 + imgData[idx * 4] / 255 / 20;
    }

    myChart.setOption({
        xAxis3D: {
            type: 'value',
            min: -1.5,
            max: 1.5
        },
        yAxis3D: {
            type: 'value',
            min: -1.5,
            max: 1.5
        },
        zAxis3D: {
            type: 'value',
            min: -1.5,
            max: 1.5
        },
        grid3D: {
            show: false,

            environment: 'none',

            axisPointer: {
                show: false
            },
            postEffect: {
                enable: true,
                screenSpaceAmbientOcclusion: {
                    enable: true,
                    radius: 10,
                    intensity: 2,
                    quality: 'high'
                },
                screenSpaceReflection: {
                    enable: false
                },
                depthOfField: {
                    enable: false,
                    focalRange: 10,
                    fstop: 4
                }
            },
            temporalSuperSampling: {
                enable: true
            },
            light: {
                main: {
                    intensity: 2,
                    shadow: true
                },
                ambient: {
                    intensity: 0
                },
                ambientCubemap: {
                    texture: ROOT_PATH + '/data-gl/asset/pisa.hdr',
                    exposure: 1,
                    diffuseIntensity: 1,
                    specularIntensity: 2
                }
            },
            viewControl: {
                distance: 80
                // projection: 'orthographic'
            }
        },
        series: [{
            type: 'surface',
            parametric: true,
            shading: 'realistic',
            silent: true,
            wireframe: {
                show: false
            },
            realisticMaterial: {
                // detailTexture: 'asset/leather/leather_albedo.jpg',
                roughness: ROOT_PATH + '/data-gl/asset/leather/leather_roughness.jpg',
                normalTexture: ROOT_PATH + '/data-gl/asset/leather/leather_normal.jpg',
                textureTiling: TILING
            },
            itemStyle: {
                color: '#300'
            },
            parametricEquation: {
                u: {
                    min: -Math.PI,
                    max: Math.PI,
                    step: Math.PI / 100
                },
                v: {
                    min: 0.4,
                    max: Math.PI - 0.4,
                    step: Math.PI / 100
                },
                x: function (u, v) {
                    return Math.sin(v) * Math.sin(u) * getScale(u, v);
                },
                y: function (u, v) {
                    return Math.sin(v) * Math.cos(u) * getScale(u, v);
                },
                z: function (u, v) {
                    return Math.cos(v) * getScale(u, v);
                }
            }
        }]
    });
}