变形目标较少的网格会受到变形目标较多的网格的影响



作为标题,具有较少变形目标的Object3D会受到另一个具有更多变形目标的Object3D的影响,这是非常奇怪的。

我通过在Three.js官方示例webgl_morphtargets中添加一个具有4个变形目标的立方体来重复这里的错误。原始示例只有一个立方体,有8个变形目标。

在示例中,顶部8条输入条改变灰色立方体的morphTargetInfluences,底部4条输入条改变蓝色立方体。两个立方体具有不同的几何形状和材料,但调整顶部8个输入条会影响蓝色立方体。

morphTargets代码部分粘贴如下。我被这个问题困扰了好几天,还是想不明白。任何指导将非常感激,谢谢!

            // first cube
            var geometry = new THREE.BoxGeometry( 100, 100, 100 );
            var material = new THREE.MeshLambertMaterial( { color: 0xffffff, morphTargets: true } );
            // construct 8 blend shapes
            for ( var i = 0; i < geometry.vertices.length; i ++ ) {
                var vertices = [];
                for ( var v = 0; v < geometry.vertices.length; v ++ ) {
                    vertices.push( geometry.vertices[ v ].clone() );
                    if ( v === i ) {
                        vertices[ vertices.length - 1 ].x *= 2;
                        vertices[ vertices.length - 1 ].y *= 2;
                        vertices[ vertices.length - 1 ].z *= 2;
                    }
                }
                geometry.morphTargets.push( { name: "target" + i, vertices: vertices } );
            }
            mesh = new THREE.Mesh( geometry, material );
            scene.add( mesh );
            // second cube
            var geometry2 = new THREE.BoxGeometry( 100, 100, 100 );
            var material2 = new THREE.MeshLambertMaterial( { color: 0x00ffff, morphTargets: true } );
            // construct 4 blend shapes
            for ( var i = 0; i < geometry2.vertices.length/2; i ++ ) {
                var vertices = [];
                for ( var v = 0; v < geometry2.vertices.length; v ++ ) {
                    vertices.push( geometry2.vertices[ v ].clone() );
                    if ( v === i ) {
                        vertices[ vertices.length - 1 ].x *= 2;
                        vertices[ vertices.length - 1 ].y *= 2;
                        vertices[ vertices.length - 1 ].z *= 2;
                    }
                }
                geometry2.morphTargets.push( { name: "target" + i, vertices: vertices } );
            }
            geometry2.computeMorphNormals();
            mesh2 = new THREE.Mesh( geometry2, material2 );
            mesh2.position.x = 200;
            scene.add( mesh2 );

这是一个bug,现在已经在新库中解决了

最新更新