使用 three.js 将一条线的每个点动画化为另一条线
Animate every point of a line to another line with three.js
我想实现一个动画。
动画应该是一行移动到另一行。走线的过程中会有一些变形
两条直线的点有对应关系
如何用three.js实现?
我尝试使用tween.js.It作品。
const material = new THREE.LineBasicMaterial({ color: 0x0000ff })
const geometry = new THREE.BufferGeometry().setAttribute('position',
new THREE.Float32BufferAttribute([-2, 0, 0, -0.5, 0, -0.5, 0, 0, -2], 3))
const line = new THREE.Line(geometry, material)
var position2 = new Float32Array([5, 0, 0, 1, 1, 1, 0, 0, 5])
setupObjectPositionTween(line, geometry.attributes.position.array, position2,
10000, 0, TWEEN.Easing.Linear.None) // duration, delay, easing
scene.add(line)
function setupObjectPositionTween(object, source, target, duration, delay, easing) {
new TWEEN.Tween(source)
.to(target, duration)
.delay(delay)
.easing(easing)
.onUpdate(function () {
// console.log(object,source,target)
object.geometry.attributes.position.array = source
object.geometry.attributes.position.needsUpdate=true
})
.start()
}
and in the render function
TWEEN.update()
我建议你用变形目标实现绿线的动画。这意味着绿线代表您的默认几何体,而蓝线代表变形目标(也称为混合变形)。然后,您可以通过将 morphTargetInfluences
参数从 0
调制为 1
.
来动画化从绿色到蓝色的转换
变形目标是几何数据的一部分,在 BufferGeometry.morphAttributes property. Since multiple meshes can share the same geometry, the morphTargetInfluences 中定义 属性 属于像网格这样的 3D 对象。
建议你研究下官方例子webgl_morphtargets是如何实现的。您可以在线条上应用相同的原则。
我想实现一个动画。
动画应该是一行移动到另一行。走线的过程中会有一些变形
两条直线的点有对应关系
如何用three.js实现?
我尝试使用tween.js.It作品。
const material = new THREE.LineBasicMaterial({ color: 0x0000ff })
const geometry = new THREE.BufferGeometry().setAttribute('position',
new THREE.Float32BufferAttribute([-2, 0, 0, -0.5, 0, -0.5, 0, 0, -2], 3))
const line = new THREE.Line(geometry, material)
var position2 = new Float32Array([5, 0, 0, 1, 1, 1, 0, 0, 5])
setupObjectPositionTween(line, geometry.attributes.position.array, position2,
10000, 0, TWEEN.Easing.Linear.None) // duration, delay, easing
scene.add(line)
function setupObjectPositionTween(object, source, target, duration, delay, easing) {
new TWEEN.Tween(source)
.to(target, duration)
.delay(delay)
.easing(easing)
.onUpdate(function () {
// console.log(object,source,target)
object.geometry.attributes.position.array = source
object.geometry.attributes.position.needsUpdate=true
})
.start()
}
and in the render function
TWEEN.update()
我建议你用变形目标实现绿线的动画。这意味着绿线代表您的默认几何体,而蓝线代表变形目标(也称为混合变形)。然后,您可以通过将 morphTargetInfluences
参数从 0
调制为 1
.
变形目标是几何数据的一部分,在 BufferGeometry.morphAttributes property. Since multiple meshes can share the same geometry, the morphTargetInfluences 中定义 属性 属于像网格这样的 3D 对象。
建议你研究下官方例子webgl_morphtargets是如何实现的。您可以在线条上应用相同的原则。