课程模块

按照由浅入深的顺序,系统性地学习 @antv/g 的核心概念和实现原理

01

项目概述与架构总览

了解 @antv/g 是什么、为什么而生、整体架构设计、monorepo 包结构,以及与同类图形库的对比。

架构 设计理念 包结构
02

场景图 (Scene Graph)

深入理解树形场景图模型:DOM 兼容的节点层次、Canvas/Document/Element 三层架构、节点操作与遍历。

DOM API DisplayObject 节点操作
03

图形元素与样式系统

掌握基础图形类型(Circle、Rect、Path 等)的属性与用法,以及 CSS 兼容的样式解析与渲染。

基础图形 CSS 样式 渐变/图案
04

渲染管线与多后端

解析帧循环机制、脏矩形优化、视锥裁剪,以及 Canvas2D/SVG/WebGL/WebGPU 多后端统一抽象。

帧循环 脏矩形 多后端
05

事件系统

学习与 DOM Event 兼容的事件模型:FederatedEvent 联邦事件、拾取机制、事件传播与委托。

FederatedEvent 拾取 事件冒泡
06

动画系统

探索基于 W3C Web Animations API 的动画实现:关键帧、缓动函数、时间轴控制与属性插值。

Web Animations 关键帧 缓动
07

相机与变换系统

理解 2D/3D 变换矩阵、本地/世界坐标系、正交/透视投影,以及相机的多种跟踪模式。

矩阵变换 相机 投影
08

插件系统与扩展

全面了解插件架构设计,以及 3D 渲染、物理引擎、布局引擎、GPU 计算等 20+ 官方插件。

插件架构 物理引擎 3D/GPGPU

架构全景

@antv/g 采用分层架构,核心层提供统一 API,渲染层支持多后端,扩展层通过插件实现

                          ┌─────────────────────────────────────────────────────┐
                          │              应用层 (Application Layer)              │
                          │  G2 / G6 / L7 / S2 / 自定义可视化应用               │
                          └───────────────────────┬─────────────────────────────┘
                                                  │
                          ┌───────────────────────▼─────────────────────────────┐
                          │                核心 API (@antv/g)                  │
                          │  Canvas · Document · DisplayObject · Group          │
                          │  动画系统 · 事件系统 · 样式系统 · 场景图             │
                          └───────────────────────┬─────────────────────────────┘
                                                  │
                   ┌──────────────────────────────┼──────────────────────────────┐
                   │                              │                              │
          ┌────────▼────────┐          ┌──────────▼──────────┐        ┌──────────▼──────────┐
          │  基础核心 g-lite  │          │  渲染器 (Renderers)  │        │  插件 (Plugins)      │
          │                 │          │                     │        │                     │
          │ 场景图管理       │          │ g-canvas (Canvas2D) │        │ 3D 扩展             │
          │ DOM API 兼容    │          │ g-svg    (SVG)      │        │ 物理引擎            │
          │ 事件服务         │          │ g-webgl  (WebGL)    │        │ 布局引擎            │
          │ 渲染服务         │          │ g-webgpu (WebGPU)   │        │ 拖拽交互            │
          │ CSS 样式解析     │          │ g-canvaskit (Skia)  │        │ 手绘风格            │
          │ 变换 & 相机      │          │                     │        │ GPGPU 计算          │
          └─────────────────┘          └─────────────────────┘        └─────────────────────┘

核心特性

@antv/g 的设计目标是成为 AntV 可视化体系的坚实基座

🌐

DOM API 兼容

图形和事件系统完全对齐浏览器 DOM Element/Event API,可无缝集成 D3、Hammer.js 等 Web 生态库。

🎨

多渲染后端

同一套代码可运行在 Canvas2D、SVG、WebGL、WebGPU、CanvasKit 五种渲染后端上,运行时可切换。

🎬

Web Animations API

动画系统实现 W3C Web Animations API 标准,支持关键帧、缓动、时间轴等完整动画能力。

🧩

插件化架构

20+ 官方插件覆盖 3D 渲染、物理模拟、Flex 布局、手绘风格等,且支持自定义插件扩展。

高性能优化

内置脏矩形检测、视锥裁剪、空间索引等优化策略,轻松应对大规模图形场景。

📱

跨平台支持

支持浏览器、移动端、Node.js 服务端渲染,以及 WebXR (VR/AR) 等多种运行环境。

快速上手

以下是一个最简示例,展示如何创建画布并绑定绘制一个交互圆形:

// 安装依赖
// npm install @antv/g @antv/g-canvas

import { Canvas, Circle } from '@antv/g';
import { Renderer } from '@antv/g-canvas';

// 1. 创建 Canvas2D 渲染器
const renderer = new Renderer();

// 2. 创建画布
const canvas = new Canvas({
  container: 'container',
  width: 600,
  height: 400,
  renderer,
});

// 3. 创建圆形
const circle = new Circle({
  style: {
    cx: 300,
    cy: 200,
    r: 80,
    fill: '#1890ff',
    stroke: '#fff',
    lineWidth: 2,
  },
});

// 4. 添加到画布
canvas.appendChild(circle);

// 5. 添加交互
circle.addEventListener('mouseenter', () => {
  circle.style.fill = '#40a9ff';
});
circle.addEventListener('mouseleave', () => {
  circle.style.fill = '#1890ff';
});