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 使用web worker时未加载缓冲区几何体网格_Javascript_Three.js_Web Worker - Fatal编程技术网

Javascript 使用web worker时未加载缓冲区几何体网格

Javascript 使用web worker时未加载缓冲区几何体网格,javascript,three.js,web-worker,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.Buff

我可以将我的几何体转换为缓冲几何体,发现网格的几何体和材质都很好,但模型并没有显示在窗口中

这是我的密码:

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);

在web worker中不可能使用类似THREE.js的库

您可以做的是在worker中构造几何体,然后将其输入到THREE.js中。在web worker中,您可以根据需要返回包含
uint32数组的
TypedArrays
float32数组的
对象,以填充所有属性


这将导致性能提升,因为数据已经以
THREE.BufferGeometry
所需的格式进行了结构化。

您的问题缺少有关您用于Geometry的库的信息。对于大多数图书馆来说,都有一个特殊的标签,知道这些标签的人都会跟随这些标签。添加正确的库标记比添加正确的语言标记重要得多。我冒昧地添加了正确的标签。另外请注意,英语句子中只有一个
或三个
..
点有效,而不是八个。