【问题标题】:ThreeJS, adding Subdivision Modifier to Objectloader-based sceneThreeJS,在基于 Objectloader 的场景中添加细分修改器
【发布时间】:2017-10-20 03:42:51
【问题描述】:

我正在尝试在加载了对象加载器的场景上使用细分修改器。尝试此操作时出现以下 javascript 错误:

“BufferSubdivisionModifier.js:514 Uncaught TypeError: Cannot read property 'array' of undefined”

我的代码如下加载带有细分修饰符的对象。

            var loader = new THREE.ObjectLoader();
            loader.load("../js/brain2.json", function(object) {
                    var material = new THREE.MeshPhongMaterial( { color: 0x888888, specular: 0x222222, shininess: 20} );

                    object.traverse( function ( child ) {
                        if ( child instanceof THREE.Mesh ) {
                            var modifier = new THREE.BufferSubdivisionModifier( 1 );
                            child.material = material;
                            child.geometry.computeFaceNormals();
                            modifier.modify( child.geometry );
                            child.material.overdraw = 1
                        };  
                    });
                    object.scale.set(15, 15, 15);
                    object.position.x = 1;
                    object.position.y = 1;
                    object.position.z = 1;
                    object.rotation.set( 1, 1, 1 );
                    scene.add( object );
            });

如果我不得不猜测,是细分修饰符不喜欢“child.geometry”对象吗?

【问题讨论】:

    标签: javascript json three.js


    【解决方案1】:

    解决方案是为孩子加载几何图形。

                var loader = new THREE.ObjectLoader();
                loader.load("../js/brain2.json", function(object) {
                        var material = new THREE.MeshPhongMaterial( { color: 0x888888, specular: 0x222222, shininess: 20} );
    
                        object.traverse( function ( child ) {
                            if ( child instanceof THREE.Mesh ) {
                                child.material = material;
                                 var geometry = new THREE.Geometry().fromBufferGeometry( child.geometry );
                                 geometry.computeFaceNormals();
                                 geometry.mergeVertices();
                                 geometry.computeVertexNormals();
                                 child.geometry = new THREE.BufferGeometry().fromGeometry( geometry );
                                var modifier = new THREE.BufferSubdivisionModifier(1);
                                modifier.modify(geometry);
                                child.material.overdraw = 1
                            };  
                        });
                        object.scale.set(15, 15, 15);
                        object.position.x = 1;
                        object.position.y = 1;
                        object.position.z = 1;
                        object.rotation.set( 5, 1, 1 );
                        scene.add( object );
                });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-09
      • 2017-10-21
      • 1970-01-01
      • 1970-01-01
      • 2019-07-24
      • 1970-01-01
      • 2021-08-11
      相关资源
      最近更新 更多