要使用变形目标,您首先必须创建一个MorphTargetManager
并将其影响到一个网格
var manager = new BABYLON.MorphTargetManager();
sphere.morphTargetManager = manager;
spher是要变形的目标。然后添加要变成的目标,两个目标之间顶点数据必须相同
sphere1.setEnabled(false)
//更新spher1的顶点
sphere1.updateMeshPositions(setposition)
function setposition(data){
for(let i=0;i<data.length;i++){
data[i]+=0.5*Math.random()
}
}
//调用变形管理器
let manager=new BABYLON.MorphTargetManager()
//添加到变形网格
sphere.morphTargetManager=manager
//设置变形的目标
let target=BABYLON.MorphTarget.FromMesh(sphere1,'s',1)
//添加到管理器变形
manager.addTarget(target)
let angle=0
scene.registerBeforeRender(()=>{
//influence是FromMesh的第三个参数值,也就是变形的比值。
target.influence=Math.sin(angle)*Math.sin(angle)
angle+=0.02
})
如果同时需要多种变形,需要添加多个变形管理器进行设置。
可变形的属性:
- 位置
- 法线(可以通过调用关闭
manager.enableNormalMorphing = false
) - 切线(可以通过调用来关闭
manager.enableTangentMorphing = false
) - uvs(可以通过调用来关闭
manager.enableUVMorphing = false
)
注意事项:
- 大多数浏览器限制为每个网格 16 个属性。向网格添加单个变形目标最多可添加 4 个新属性(位置 + 法线 + 切线 + uvs)。这可能会很快超出最大属性限制。
- 同一管理器中的所有目标必须具有相同的顶点数
- 网格及其 MorphTargetManager 必须具有相同的顶点数