Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.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_3d_Three.js_Loading - Fatal编程技术网

Javascript 如何在three.js中检查项目是否加载到场景中?

Javascript 如何在three.js中检查项目是否加载到场景中?,javascript,3d,three.js,loading,Javascript,3d,Three.js,Loading,我使用THREE.js Loading Manager检查对象或纹理是否已加载 var Mesh; var TLoader = new THREE.TextureLoader(manager); var manager = new THREE.LoadingManager(); manager.onProgress = function ( item, loaded, total ) { console.log( item, loaded, total ); }; manager

我使用THREE.js Loading Manager检查对象或纹理是否已加载

var Mesh;
var TLoader = new THREE.TextureLoader(manager);

var manager = new THREE.LoadingManager();
manager.onProgress = function ( item, loaded, total ) {

    console.log( item, loaded, total );

};

manager.onLoad = function()
{

    console.log(Renderer.domElement.toDataURL());
}


 function renderModel(path,texture) {

            var Material = new THREE.MeshPhongMaterial({shading: THREE.SmoothShading});
            Material.side = THREE.DoubleSide;

            var Loader = new THREE.JSONLoader(manager);
            Loader.load(path,function(geometry){

                geometry.mergeVertices();
                geometry.computeFaceNormals();
                geometry.computeVertexNormals();

                TLoader.load(texture,function(texture){


                Mesh = new THREE.Mesh(geometry, Material);
                Mesh.material.map =texture;
                Scene.add(Mesh);


                });
            });
        }
我只是在循环中调用renderModel函数。 但manager.onload函数输出的console.log(Renderer.domeElement.toDataURL())只给出了一些3d模型的图像,而不是场景中的所有模型

我只想在场景中渲染所有3d模型时获取“Renderer.domeElement.toDataURL()”


现在,仅获取2或3个模型的图像,但在场景中所有项目都已加载

渲染器每帧渲染一个图像。加载所有对象完成后,立即调用管理器的
onLoad
方法。因此,最后一个对象被添加到场景中,您可以检索图像数据,而不给渲染器渲染新图像的机会。您需要等待新帧。可能有一个
超时时间
,例如200毫秒会有所帮助

编辑

您还可以在
onLoad
中调用
render
方法,以便渲染器在调用
console.log
之前绘制新图像

manager.onLoad = function()
{
    Renderer.render( Scene, camera );
    console.log(Renderer.domElement.toDataURL());
}

谢谢,这很有效。有没有什么方法可以在不给出超时的情况下完成呢:)我想到了调用
Renderer.render(场景、相机)onLoad
方法中的code>。请参阅更新。不适用于我。它只在超时的情况下工作,这是一个糟糕的解决方法