使用Web worker时缓冲几何网格未加载

时间:2016-08-19 09:50:19

标签: javascript three.js web-worker

我可以将几何体转移到缓冲区几何体中,发现几何体和材质都很好,但模型没有显示在窗口中。

这是我的代码:

var myWorker = new Worker("js/respond.js");
myWorker.postMessage("horse.js");

myWorker.onmessage = function(e) {
    geometry = new THREE.BufferGeometry();
    var colorattribute = new THREE.BufferAttribute(e.data.color, 3, false);
    var uv = new THREE.BufferAttribute(e.data.uv, 3, false);//created buffer attribute with worker data
    var normal = new THREE.BufferAttribute(e.data.normal, 3, false);
    var position = new THREE.BufferAttribute(e.data.position, 3, false);
    var morph = new THREE.BufferAttribute(e.data.morphAttributes, 3, false);
    geometry.addAttribute('color', colorattribute);
    geometry.addAttribute('uv', uv);
    geometry.addAttribute('normal', normal);
    geometry.addAttribute('position', position);
    geometry.addGroup(e.data.groups[0].start, e.data.groups[0].count, e.data.groups[0].materialIndex);
    geometry.morphAttributes.position = [];
    geometry.morphAttributes.position.push(morph);
    //console.log(e.data.morphAttributes);

    // mixer = new THREE.AnimationMixer(mesh);
    // clip = THREE.AnimationClip.CreateFromMorphTargetSequence('static', geometry.morphAttributes, 30);
    console.log(geometry);
    mesh = new THREE.Mesh(geometry, new THREE.MeshLambertMaterial({color:  0xffffff, morphTargets: true}));
    console.log(mesh);
    scene.add(mesh);

1 个答案:

答案 0 :(得分:1)

在您的网络工作者中无法使用像THREE.js这样的库。

可以做的是在工人中构建几何体,然后将其输入THREE.js。在Web工作者中,您可以根据需要返回包含TypedArrays UInt32ArraysFloat32Arrays的对象,以填充所有属性。

这会带来性能提升,因为数据已经以THREE.BufferGeometry想要的格式构建。