进入 3D 世界
Previous
GPGPU 初体验
Next
使用 Box2D 物理引擎
Loading...
通过 g-plugin-3d 插件的支持,我们可以绘制 3D 图形,当然渲染器必须指定为 g-webgl
。
创建画布和渲染器与之前的教程完全一致,注册 g-plugin-3d 插件
import { Canvas, CanvasEvent } from '@antv/g';import { Renderer } from '@antv/g-webgl';import { Plugin as Plugin3D } from '@antv/g-plugin-3d';// create a rendererconst renderer = new Renderer();renderer.registerPlugin(new Plugin3D());// create a canvasconst canvas = new Canvas({container: 'container',width: 600,height: 500,renderer,});
在创建 3D 图形时,需要使用 材质 和 几何,它们都需要使用 GPU 底层资源(Buffer 和 Texture),创建时需要获取 GPU Device:
(async () => {// wait for canvas' initialization completeawait canvas.ready;// use GPU deviceconst plugin = renderer.getPlugin('device-renderer');const device = plugin.getDevice();})();
不同于各种各样的 2D 图形(Circle、Rect),3D 图形使用 Mesh(三角网格)描述,它的形状由 几何 定义,外观样式由 材质 定义。例如这里我们使用 CubeGeometry 和 MeshBasicMaterial:
import { MeshBasicMaterial, CubeGeometry, Mesh } from '@antv/g-plugin-3d';// 立方体几何const cubeGeometry = new CubeGeometry(device, {width: 200,height: 200,depth: 200,});// 基础材质const basicMaterial = new MeshBasicMaterial(device);const cube = new Mesh({style: {fill: '#1890FF',opacity: 1,geometry: cubeGeometry,material: basicMaterial,},});
创建好的 Mesh 和 2D 基础图形一样,可以进行变换。例如我们使用 setPosition
设置它的全局坐标:
cube.setPosition(300, 250, 0);canvas.appendChild(cube);