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
three.js从gltf创建网格_Three.js_Augmented Reality - Fatal编程技术网

three.js从gltf创建网格

three.js从gltf创建网格,three.js,augmented-reality,Three.js,Augmented Reality,我在three.js中渲染了一个gltf对象,但问题是我认为它不包含网格。我想使用光线投射器通过点击事件处理程序移动对象。我已经准备好了执行此操作的所有代码,但是当我单击时它没有注册 加载对象的代码: var loader = new THREE.GLTFLoader(); loader.load( // resource URL './vitra_eames_plastic_chair/scene.gltf', // called when the resou

我在three.js中渲染了一个gltf对象,但问题是我认为它不包含网格。我想使用光线投射器通过点击事件处理程序移动对象。我已经准备好了执行此操作的所有代码,但是当我单击时它没有注册

加载对象的代码:

    var loader = new THREE.GLTFLoader();

loader.load(
    // resource URL
    './vitra_eames_plastic_chair/scene.gltf',
    // called when the resource is loaded
    function ( object ) {

        object.animations; // Array<THREE.AnimationClip>
        object.scene; // THREE.Scene
        object.scenes; // Array<THREE.Scene>
        object.cameras; // Array<THREE.Camera>
        object.asset; // Object

        var object = new THREE.Mesh(gltf.asset, new THREE.MeshLambertMaterial({ color: Math.random() * 0xffffff }));
        object.scene.position.x = -75;
        object.scene.position.y = -75;
        object.scene.position.z = -75;
        object.scene.rotation.x = 50;
        object.scene.rotation.y = 50;
        object.scene.rotation.z = 50;
        object.scene.scale.x = .5;
        object.scene.scale.y = .5;
        object.scene.scale.z = .5;
        object.scene.castShadow = true;
        object.scene.receiveShadow = true;
        boxScene.add(object.scene);
        objects.push(object.scene);
    },
    // called while loading is progressing
    function ( xhr ) {
        console.log( ( xhr.loaded / xhr.total * 100 ) + '% loaded' );
    },
    // called when loading has errors
    function ( error ) {

        console.log( 'An error happened' );

    }
);
var loader=new THREE.GLTFLoader();
装载机(
//资源URL
“./vitra_eames_塑料椅子/scene.gltf”,
//在加载资源时调用
功能(对象){
object.animations;//数组
object.scene;//3.scene
object.scenes;//数组
object.cameras;//数组
object.asset;//对象
var object=new THREE.Mesh(gltf.asset,new THREE.MeshLambertMaterial({color:Math.random()*0xffffff}));
object.scene.position.x=-75;
object.scene.position.y=-75;
object.scene.position.z=-75;
object.scene.rotation.x=50;
object.scene.rotation.y=50;
object.scene.rotation.z=50;
object.scene.scale.x=.5;
object.scene.scale.y=.5;
object.scene.scale.z=.5;
object.scene.castShadow=true;
object.scene.receiveShadow=true;
添加(object.scene);
objects.push(object.scene);
},
//加载正在进行时调用
函数(xhr){
log((xhr.loaded/xhr.total*100)+'%loaded');
},
//加载有错误时调用
函数(错误){
log('发生错误');
}
);
我也有这个代码,它生成框。在这里,事件处理程序可以工作,但显然对象的加载方式不同。如有任何建议,将不胜感激

    var geometry = new THREE.BoxGeometry(1, 1, 1);
for (var i = 0; i < 50; i++) {
    var object = new THREE.Mesh(geometry, new THREE.MeshLambertMaterial({ color: Math.random() * 0xffffff }));
    object.position.x = Math.random() * 50 - 25;
    object.position.y = Math.random() * 10 + 1;
    object.position.z = Math.random() * 50 - 25;
    object.rotation.x = Math.random() * 2 * Math.PI;
    object.rotation.y = Math.random() * 2 * Math.PI;
    object.rotation.z = Math.random() * 2 * Math.PI;
    object.scale.x = Math.random() * 3 + 1;
    object.scale.y = Math.random() * 3 + 1;
    object.scale.z = Math.random() * 3 + 1;
    object.castShadow = true;
    object.receiveShadow = true;
    boxScene.add(object);
    objects.push(object);
}
var-geometry=new-THREE.BoxGeometry(1,1,1);
对于(变量i=0;i<50;i++){
var object=new THREE.Mesh(几何体,new THREE.MeshLambertMaterial({color:Math.random()*0xffffff}));
object.position.x=Math.random()*50-25;
object.position.y=Math.random()*10+1;
object.position.z=Math.random()*50-25;
object.rotation.x=Math.random()*2*Math.PI;
object.rotation.y=Math.random()*2*Math.PI;
object.rotation.z=Math.random()*2*Math.PI;
object.scale.x=Math.random()*3+1;
object.scale.y=Math.random()*3+1;
object.scale.z=Math.random()*3+1;
object.castShadow=true;
object.receiveShadow=true;
添加(对象);
对象。推(对象);
}

我认为您必须更改
onLoad()
调用
GLTFLoader.load()
来解决这个问题。您正在使用不正确的
object.asset
创建网格。相反,您可以将
object.scene
直接添加到场景图中。因此,在大多数情况下,回调可以简单地如下所示:

var loader = new THREE.GLTFLoader();
loader.load( function( gltf ) {

    scene.add( gltf.scene );

) };
请查看以下示例的源代码,以了解此方法的实际应用


“我认为它不包含网格”它包含一个网格。能否提供光线投射器的代码以及如何获取交点?如果它渲染包含网格。@prisoner849
var raycaster=new THREE.raycaster()