我只是试图用从Blender到三个js的动画加载模型。因此,我试图复制http://stemkoski.github.io/Three.js/Model-Animation.html
我下载了他的代码,他使用了:
var jsonLoader = new THREE.JSONLoader();
jsonLoader.load( "models/android-animations.js", addModelToScene );
// addModelToScene function is called back after model has loaded
var ambientLight = new THREE.AmbientLight(0x111111);
scene.add(ambientLight);
}
function addModelToScene( geometry, materials )
{
// for preparing animation
for (var i = 0; i < materials.length; i++)
materials[i].morphTargets = true;
var material = new THREE.MeshFaceMaterial( materials );
android = new THREE.Mesh( geometry, material );
android.scale.set(10,10,10);
scene.add( android );
}
已授予Im在节点JS中工作的权限,但执行此操作时出现错误JSONLoader has been removed
:
var jsonLoader = new THREE.JSONLoader();
jsonLoader.load( "./src/scripts/elements/android-animations.js", this.addModelJson);
我已经尝试过FBXLoader,ObjectLoader,以及所有其他工具。我可以加载模型,但不能加载带有动画的模型。这是唯一的解决方案吗?
如果JSONLoader不再存在,如何使用来自Blender的动画加载模型?
更新:
当我像这样使用LegacyJSONLoader时, this
是未定义的:
var jsonLoader = new THREE.LegacyJSONLoader();
jsonLoader.load( "./src/scripts/elements/android-animations.js", this.addModelJson);
addModelJson( geometry, materials, scene )
{
// for preparing animation
for (var i = 0; i < materials.length; i++)
materials[i].morphTargets = true;
var material = new THREE.MeshFaceMaterial( materials );
var android = new THREE.Mesh( geometry, material );
android.scale.set(10,10,10);
this.scene.add( android );
}
答案 0 :(得分:0)
此装载程序仍以LegacyJSONLoader
的形式提供。如果在项目中包含该文件,则应该能够创建LegacyJSONLoader
的实例并像以前一样加载JSON模型。
这是Link
答案 1 :(得分:0)
对于第二个未定义this
的问题。
this
可能不是您要查找的对象。 this
可能有许多不同的含义,具体取决于您的使用方式和使用位置。
但是,好像scene
传递给了函数,因此您应该可以这样做:
var jsonLoader = new THREE.LegacyJSONLoader();
jsonLoader.load( "./src/scripts/elements/android-animations.js", this.addModelJson);
addModelJson( geometry, materials, scene ) // <-- scene is passed in
{
// for preparing animation
for (var i = 0; i < materials.length; i++)
materials[i].morphTargets = true;
var material = new THREE.MeshFaceMaterial( materials );
var android = new THREE.Mesh( geometry, material );
android.scale.set(10,10,10);
// this.scene.add( android ); `this` isn't what you are thinking it is
scene.add(android); // <-- use the passed in `scene` object instead
}