Incubator-echarts: echarts-gl绘制十万级点卡顿的问题

Created on 28 Jan 2018  ·  15Comments  ·  Source: apache/incubator-echarts

One-line summary [问题简述]

我绘制了50万个点组成的面,很久才渲染出来,几乎不能旋转放大缩小

Version & Environment [版本及环境]

  • ECharts version [ECharts 版本]:
  • Browser version [浏览器类型和版本]:
  • OS Version [操作系统类型和版本]:

最新版echarts,UC浏览器最新版,win10

Expected behaviour [期望结果]

是不是echarts不能渲染那么多点?或者有什么数据结构能快速渲染

ECharts option [ECharts配置项]


option = {

}

Other comments [其他信息]


gl pending stale

Most helpful comment

什么图?什么数据?配置项怎么样?你的硬件环境,能否具体点描述?

All 15 comments

什么图?什么数据?配置项怎么样?你的硬件环境,能否具体点描述?

感谢您的回复,我们现在在做一个物体微波散射项目,一个面大概有几十万个点,所以想用echarts实现可视化。

发现几十万个点渲染出来很卡。然后就用官方例程试了一下,也卡。将0.2改成0.02,点数变多就会卡。

u: {
min: -13.2,
max: 13.2,
step: 0.02
},
v: {
min: -37.4,
max: 37.4,
step: 0.02
},

官方例程改动后:

var sin = Math.sin;
            var cos = Math.cos;
            var pow = Math.pow;
            var sqrt = Math.sqrt;
            var cosh = Math.cosh;
            var sinh = Math.sinh;
            var PI = Math.PI;

            var aa = 0.4;
            var r = 1 - aa * aa;
            var w = sqrt(r);

            option4 = {
                toolbox: {
                    left: 20,
                    iconStyle: {
                        normal: {
                            borderColor: '#000'
                        }
                    },
                    feature: {
                        myExportObj: {
                            title: 'Export OBJ',
                            icon: 'M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0',
                            onclick: function () {
                                var res = echarts.exportGL2PLY(myChart, {
                                    mainType: 'grid3D',
                                    index: 0
                                });
                                download(res, 'surface.ply', 'text/plain');
                            }
                        }
                    }
                },
                tooltip: {},
                visualMap: {
                    show: false,
                    dimension: 0,
                    min: -9,
                    max: 9,
                    inRange: {
                        //color: ['#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026']
                        color: ['#00007F', '#0000FF', '#00FFFF', '#00FF00', '#FFFF00', '#FF0000', '#7F0000']
                    }
                },
                xAxis3D: {},
                yAxis3D: {},
                zAxis3D: {},
                grid3D: {
                    show: true,
                    postEffect: {
                        enable: true,
                        SSAO: {
                            enable: true,
                            radius: 4
                        }
                    },
                    viewControl: {
                        distance: 130,
                        beta: 50
                    },
                    light: {
                        main: {
                            intensity: 2,
                            shadow: true
                        },
                        ambient: {
                            intensity: 1
                        },
                        ambientCubemap: {
                            //texture: 'data-gl/asset/canyon.hdr',
                            exposure: 2,
                            diffuseIntensity: 0.2,
                            specularIntensity: 1
                        }
                    }
                },
                series: [{
                    type: 'surface',
                    parametric: true,
                    wireframe: {
                        show: false
                    },
                    shading: 'color',
                    realisticMaterial: {
                        roughness: 0.3,
                        metalness: 0
                    },
                    parametricEquation: {
                        u: {
                            min: -13.2,
                            max: 13.2,
                            step: 0.02
                        },
                        v: {
                            min: -37.4,
                            max: 37.4,
                            step: 0.02
                        },
                        x: function (u, v) {
                            var denom = aa * (pow(w * cosh(aa * u), 2) + aa * pow(sin(w * v), 2))
                            return -u + (2 * r * cosh(aa * u) * sinh(aa * u) / denom);
                        },
                        y: function (u, v) {
                            var denom = aa * (pow(w * cosh(aa * u), 2) + aa * pow(sin(w * v), 2))
                            return 2 * w * cosh(aa * u) * (-(w * cos(v) * cos(w * v)) - (sin(v) * sin(w * v))) / denom;
                        },
                        z: function (u, v) {
                            var denom = aa * (pow(w * cosh(aa * u), 2) + aa * pow(sin(w * v), 2))
                            return 2 * w * cosh(aa * u) * (-(w * sin(v) * cos(w * v)) + (cos(v) * sin(w * v))) / denom
                        }
                    }
                }]
            };

我的硬件,E3-1230-V3,GTX1060,16G内存。还有我想问一下,如果echarts能进行几十万个点建立三维面的话,我该把数据保存成什么格式能读取快一点。echarts有没有实现显示列表,能不能一次渲染出来后就不用再读取数据了。感谢!

了解了,我看一下,ps 你发的这段代码实际上已经有 500w+ 的顶点了

对,我我改后的例程确实到了500W+个点了。但是我们测试的点是1022×493,没到那么多,一样的卡,你们测试过这个数量级的吗?我现在把数据存在txt文件里,或者我得用json格式的数据才快?

只将u、v其中的一个的step由0.2改到0.02也卡

u: {
min: -13.2,
max: 13.2,
step: 0.02
},
v: {
min: -37.4,
max: 37.4,
step: 0.02
},

好像到10w以上就开始延时了

这个数据量级初始化的时候是会卡一下,但是交互的时候不应该会卡

u: {
min: -13.2,
max: 13.2,
step: 0.02
},
v: {
min: -37.4,
max: 37.4,
step: 0.2
},

确实是卡的,例程如下:
http://gallery.echartsjs.com/editor.html?c=xSJbHjb2Hf&v=4

哦,这个是鼠标和图形求交计算量太大造成的卡顿,如果不需要 tooltip 的话可以设置 silent: true 我看看还能不能再优化

用手机访问那个示例,旋转啥的倒是很流畅啊

嗯,是求交的问题。1.01版本发布了吗,还是希望能有当前点提示框。感谢你们的工作!

1.0.1 已经发布了

嗯,好的我去下载最新的。感谢。

你好,我想问一下,gl在三维坐标系中,不能设置两个坐标轴(单位一样)的比例尺一样吗,它现在是坐标轴一样长,就导致比例尺不同,画出来的模型在某个轴上就会被压缩。我翻看了配置项,好像没有相关的设置。如果没有,你们可否加上去呢?感谢。

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

Was this page helpful?
0 / 5 - 0 ratings