21.Three.js 优化之合并对象的动画
21 Three.js 优化之合并对象的动画
在上一篇中,我们将
但是,我们所加载的是
假设现在我们添加新的需求:
- 加载并显示全球女性人口数量
- 此时,我们程序中 男性与女性 各有
1 份数据 - 我们需要做的动画就是:当切换 不同性别数据时,柱状物也会随着人口数量不同而发生 高低 变化的动画
不同性别的人口数据
- 男性:https://threejsfundamentals.org/threejs/resources/data/gpw/gpw_v4_basic_demographic_characteristics_rev10_a000_014mt_2010_cntm_1_deg.asc
- 女性:https://threejsfundamentals.org/threejs/resources/data/gpw/gpw_v4_basic_demographic_characteristics_rev10_a000_014ft_2010_cntm_1_deg.asc
很显然,之前把所有柱状物都合并成
想实现每一个柱状物高低变化的动画,又该如何实现呢?
实现方式:
-
通过 设置物体材质的
morphtargets( 变形目标) 属性为true 来改变柱状物形状const material = new THREE.MeshBasicMaterial({ vertexColors: true, morphTargets: true, })
-
通过
Tween.js 来创建改变过程中的动画import { TWEEN } from 'three/examples/jsm/libs/tween.module.min.js' 或者自己去安装 tween.js 的模块 yarn add @tweenjs/tween.js //npm i @tweenjs/tween.js --save import TWEEN from '@tweenjs/tween.js'
Tween.js 的用法,请参考官网:https://github.com/tweenjs/tween.js -
通过材质的
Material.onBeforeCompile() 函数来产生改变过程中柱状物颜色的变化Material.onBeforeCompile() 的用法,请参考文档:https://threejs.org/docs/index.html#api/zh/materials/Material.onBeforeCompile
具体代码
…
上面仅仅是提供了解决思路,而实际具体的代码复杂程度,超出了我目前的认知。
所以我们暂且搁置,所有能力的同学,可自行查看本文对应的原版教程:
https://threejsfundamentals.org/threejs/lessons/threejs-optimize-lots-of-objects-animated.html,
将来有一天
下一节,我们学习另外一个可以提升计算性能的方式:使用