function animate(){
requestAnimationFrame(animate);
renderer.render(scene, camera);
for (let k = 0; k < hudieList.length; k++) {// hudieList中存储的是很多个蝴蝶模型Scene
if (hudieList[k]) {
hudieTrans(hudieList[k]);
}
}
}
// model是蝴蝶模型
function hudieTrans(model){
if (!model) return;
if(model.targetPosition === undefined){
model.targetPosition = new THREE.Vector3(model.position.x, model.position.y, model.position.z);
}
if (model.position.distanceTo(model.targetPosition) < 0.4) {
// 生成新的飞行目标位置
var targetPosition = model.targetPosition = new THREE.Vector3(randomNum(-50, 50), randomNum(-50, 50), randomNum(-50, 50));
var dirV3 = new THREE.Vector3();
dirV3.subVectors(model.targetPosition, model.position); // 计算飞行方向存储在dirV3中
model.speedV3 = dirV3.normalize();
model.speedV3 = v3Scale(model.speedV3, 0.02);//设置飞行速度,第二个参数值越小飞行速度越慢,反之越快
model.lookAt( targetPosition.x, targetPosition.y, targetPosition.z);// 改变蝴蝶头部方向
} else {
model.position.x += model.speedV3.x;
model.position.y += model.speedV3.y;
model.position.z += model.speedV3.z;
}
}
function v3Scale(v3,scale){
return new THREE.Vector3(v3.x * scale, v3.y * scale, v3.z * scale)
}
function randomNum(minNum, maxNum) {
switch (arguments.length) {
case 1:
return parseInt(Math.random() * minNum + 1, 10);
case 2:
return parseInt(Math.random() * (maxNum - minNum + 1) + minNum, 10);
default:
return 0;
}
}
THREE.js实现蝴蝶随机方向飞舞(飞行过程中可随机改变方向)
最新推荐文章于 2023-09-02 11:35:25 发布