surface3D
上一篇
interval3D
下一篇
renderer
Loading...
主要用于绘制 3D 曲面图。
首先需要使用 @antv/g-webgl 作为渲染器并注册以下两个插件:
然后设置 z 通道、scale 和 z 坐标轴。无需在场景中添加光源。
import { Runtime, corelib, extend } from '@antv/g2';import { threedlib } from '@antv/g2-extension-3d';import { CameraType } from '@antv/g';import { Renderer as WebGLRenderer } from '@antv/g-webgl';import { Plugin as ThreeDPlugin } from '@antv/g-plugin-3d';import { Plugin as ControlPlugin } from '@antv/g-plugin-control';const renderer = new WebGLRenderer();renderer.registerPlugin(new ControlPlugin());renderer.registerPlugin(new ThreeDPlugin());const Chart = extend(Runtime, {...corelib(),...threedlib(),});// 初始化图表实例const chart = new Chart({container: 'container',renderer,width: 500,height: 500,depth: 400,});// We set the width/height to 100;const size = 100;const points = [];for (let i = 0; i <= 2 * size; ++i) {const theta = (Math.PI * (i - size)) / size;for (let j = 0; j <= 2 * size; ++j) {var phi = (Math.PI * (j - size)) / size;const x = (10.0 + Math.cos(theta)) * Math.cos(phi);const y = (10.0 + Math.cos(theta)) * Math.sin(phi);points.push({x: i,y: j,z: Math.sin(theta) * x * y,});}}chart.surface3D().data(points).encode('x', 'x').encode('y', 'y').encode('z', 'z').coordinate({ type: 'cartesian3D' }).scale('x', { nice: true }).scale('y', { nice: true }).scale('z', { nice: true }).legend(false).axis('x', { gridLineWidth: 1 }).axis('y', { gridLineWidth: 1, titleBillboardRotation: -Math.PI / 2 }).axis('z', { gridLineWidth: 1 });chart.render().then(() => {const { canvas } = chart.getContext();const camera = canvas.getCamera();camera.setPerspective(0.1, 2000, 45, 500 / 500);camera.rotate(30, 30, 0);camera.dolly(60);camera.setType(CameraType.ORBITING);});
更多的案例,可以查看图表示例页面。