Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 材质蒙皮为真时,Three.js蒙皮动画网格将消失_Javascript_Three.js - Fatal编程技术网

Javascript 材质蒙皮为真时,Three.js蒙皮动画网格将消失

Javascript 材质蒙皮为真时,Three.js蒙皮动画网格将消失,javascript,three.js,Javascript,Three.js,我已经从Blender导出了一个动画模型,它在实例化时似乎没有任何问题。我能够创建THREE.Animation和模型,但我发现没有动画。我意识到我需要在每种材质上设置蒙皮为真,但当我这样做时,整个网格就会丢失 下面是我的(快速而混乱的)代码,试图让一切正常工作 function loadModel() { var loader = new THREE.JSONLoader(); loader.load('assets/models/Robot.js', func

我已经从Blender导出了一个动画模型,它在实例化时似乎没有任何问题。我能够创建
THREE.Animation
和模型,但我发现没有动画。我意识到我需要在每种材质上设置
蒙皮
为真,但当我这样做时,整个网格就会丢失

下面是我的(快速而混乱的)代码,试图让一切正常工作

function loadModel() {
        var loader = new THREE.JSONLoader();
        loader.load('assets/models/Robot.js', function(geom, mat) {
            _mesh = new THREE.Object3D();
            _scene.add(_mesh);

            geom.computeBoundingBox();

            ensureLoop(geom.animation);
            THREE.AnimationHandler.add(geom.animation);

            for (var i = 0; i < mat.length; i++) {
                var m = mat[i];
                //m.skinning = true; <-- Uncommenting this makes the model disappear
                //m.morphTargets = true; <-- This causes all sorts of WebGL warnings

                m.wrapAround = true;
            }

            var mesh = new THREE.SkinnedMesh(geom, new THREE.MeshFaceMaterial(mat));
            mesh.scale.set(400, 400, 400);
            mesh.position.set(0, -200, 0);
            mesh.rotation.set(Utils.toRadians(-90), 0, 0);
            _mesh.add(mesh);
            _robot = mesh;
            Render.startRender(loop);

            var animation = new THREE.Animation(mesh, geom.animation.name);
            animation.JITCompile = false;
            animation.interpolationType = THREE.AnimationHandler.LINEAR;
            animation.play();

        });
    }

在导出的JSON文件的元数据部分中,变形目标骨骼的数量都大于0

我认为您在这里遵循了以下示例:

其中,动画模型使用变形目标和骨骼动画(有关理论概念,请参阅维基百科)

如果动画模型仅使用骨骼动画,如本例所示


您必须实例化一个THREE.SkindMesh对象,然后仅将m.skinning属性设置为true

我刚才遇到了同样的问题。对我来说,有效的方法是使用应用的比例重新制作模型,并为LocRotScale设置关键帧,而不仅仅是位置。

最近,我在将blender蒙皮动画导出到json时遇到了类似的网格消除问题。事实证明,我使用的网格有两个顶点(一个顶点隐藏另一个顶点)。在blender中创建顶点组和动画时,所有这些看起来都很好,但当我通过three.js导入网格时,动画一开始就消失了。换句话说,如果顶点组中忽略了网格中的一个顶点,则会出现这种消除行为。为了防止这个问题,我现在使用blender中的“remove doubles”函数在将网格导出到json之前验证网格完整性。您可能遇到了相同的问题,并重新执行网格工作来修复它。。。不管怎样,这个问题已经很老了,但是这个话题到今天仍然有效,所以我希望这个新的信息能帮助其他人

和平信息1

function loop() {
    _mesh.rotation.y += 0.01;

    var delta = 0.75 * _clock.getDelta();
    THREE.AnimationHandler.update(delta);
}