我正在研究几年前开始的模拟项目。他们使用旧版本的three.js和tween.js库,我不得不因其他原因升级它们。我有一个问题,那段代码曾经工作过,现在还没有,我无法弄明白为什么......
现在,让我解释一下问题所在。在应用程序开始时,通过为每个网格调用此函数来加载网格:
Canvas
注意:我将只显示动画创作,我打电话给#34;开始"当然,以后的方法 现在,当我尝试通过改变位置来移动该对象时,它会起作用:
function loadMesh(objPath, objName, worldScene, initPosition) {
if (initPosition == undefined) {
initPosition = new THREE.Vector3();
}
var loader = new THREE.JSONLoader();
loader.load(objPath, function (geometry, materials) {
for (var material in materials) {
materials[material].shading = THREE.FlatShading;
}
var mesh = new THREE.Mesh(geometry, new THREE.MeshFaceMaterial(materials));
mesh.scale.set(1, 1, 1);
mesh.name = objName;
mesh.position = initPosition;
mesh.positionO = initPosition.clone();
worldScene.add(mesh);
objects.push(mesh);
objDict[objName] = mesh;
loadCounter--;
});
}
但如果我尝试旋转这样的对象,它就不起作用了:
new TWEEN.Tween(objDict["Screws"].position)
.to({y: 5}, 1000)
.delay(500);
我试图解决这个问题,但找不到任何东西......请注意,此代码之前有效!我认为问题是JSONLoader,因为当我在调试模式下运行代码时, mesh 对象缺少 matrixRotationWorld 属性,并且在false时具有 matrixWorldNeedsUpdate 属性,在previos应用程序版本 matrixWorldNeedsUpdate 是真的,并且有 matrixRotationWorld 属性。
任何帮助都会受到极大关注!
答案 0 :(得分:1)
像这样使用补间
var coords = { x: 0, y: 0 };
new TWEEN.Tween(mesh.rotation).to({x: 10, y: 10}, 3000).onUpdate(function () {
mesh.rotation.x = coords.x;
mesh.rotation.y = coords.y;
}).start();