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
Javascript 如何在Three.js中使用ObjLoader加载的对象顶点_Javascript_Three.js_Objloader - Fatal编程技术网

Javascript 如何在Three.js中使用ObjLoader加载的对象顶点

Javascript 如何在Three.js中使用ObjLoader加载的对象顶点,javascript,three.js,objloader,Javascript,Three.js,Objloader,我的场景中有一个对象由ObjLoader加载。但我需要读到物体的顶点。但我还是不知道怎么做。在我在three.js中制作的普通立方体上,我可以毫无问题地读取和更改顶点,但在ObjLoader加载的对象上,它不起作用。我还尝试使用FaceNormalsHelper,它也适用于多维数据集,但不适用于我的对象 这是我的密码: //My cube this works var geometry = new THREE.BoxGeometry(20, 20, 20); var co

我的场景中有一个对象由ObjLoader加载。但我需要读到物体的顶点。但我还是不知道怎么做。在我在three.js中制作的普通立方体上,我可以毫无问题地读取和更改顶点,但在ObjLoader加载的对象上,它不起作用。我还尝试使用FaceNormalsHelper,它也适用于多维数据集,但不适用于我的对象

这是我的密码:

    //My cube this works
    var geometry = new THREE.BoxGeometry(20, 20, 20);
    var color = new THREE.Color("rgba(188, 141, 190, 1)");
    var material = new THREE.MeshNormalMaterial({color: color.getHex()});
    var cube = new THREE.Mesh(geometry, material);

    var helpeer = new THREE.FaceNormalsHelper( cube, 20, 0x00ff00, 1 );
    var vert = cube.geometry.vertices[1].y;

    scene.add( cube );
    scene.add( helpeer );

    //Loading my object 
    var manager = new THREE.LoadingManager();
    manager.onProgress = function ( item, loaded, total ) {
        console.log( item, loaded, total );
    };
    var texture = new THREE.Texture();
    var onProgress = function ( xhr ) {
        if ( xhr.lengthComputable ) {
            var percentComplete = xhr.loaded / xhr.total * 100;
            console.log( Math.round(percentComplete, 2) + '% downloaded' );
        }
    };
    var onError = function ( xhr ) {
    };
    var loader = new THREE.ImageLoader( manager );
    loader.load( 'objects/textura.jpg', function ( image ) {
        texture.image = image;
        texture.needsUpdate = true;
    } );

    var loader = new THREE.OBJLoader( manager );
    loader.load( 'objects/scan_leg_repair.obj', function ( object ) {
        object.traverse( function ( child ) {
            if ( child instanceof THREE.Mesh ) {
                child.material.map = texture;
            }
        } );

        object.position.y = - 100;
        object.rotation.x = -1.5;
        object.rotation.z = 3;

        scene.add( object );

        //That is what i tried. Without success :(
        //var vert2 = object.geometry.vertices[1].y;
        //var vert3 = object.children[0].geometry.vertices[1].y;
        //var helper = new THREE.FaceNormalsHelper( object, 20, 0x00ff00, 1 );
        //var helper = new THREE.FaceNormalsHelper( object.children[0], 20, 0x00ff00, 1 );
        //scene.add( helper );

    }, onProgress, onError );

非常感谢

OBJLoader将对象创建为
THREE.group
。 所以你们可以通过下面的方式访问顶点

object.children[0].geometry.attributes.position

几何体的类型是
THREE.BufferGeometry()
,因此其顶点位于缓冲区属性中,例如
object.geometry.attributes.position
。我也有同样的问题。我尝试了这个var vrt=object.geometry.attributes.position;控制台日志(vrt);但get error无法读取未定义的属性“attributes”