javascript - 三.js ObjectLoader 不解析来自worker的对象
问题描述
让我们从一个运行良好的用例开始..
工人.js:
const newMaterial = new THREE.MeshStandardMaterial( { color: 0x606060 } );
dracoLoader.decodeDracoFile(drcMesh,function(bufferGeometry){
var geometry;
geometry = new THREE.Mesh(bufferGeometry, newMaterial);
var serializedGeometry = geometry.toJSON();
postMessage(serializedGeometry);
});
在 HTML 方面:
const consumer = new Worker('../workers/consumer.js', {
type: 'module'
});
consumer.onmessage = function(e) {
console.log('Message received from worker', e.data.type);
var jsonLoader = new THREE.ObjectLoader();
var geometry = jsonLoader.parse(e.data)
meshes.push(geometry)
}
在这种情况下,我可以在 HTML 端创建网格,但是在下一个用例中,我遇到了一些问题。现在我将添加一个纹理 THREE.ImageBitmapLoader();
你可能会问我为什么不使用THREE.TextureLoader();
它,因为工人有几个限制,其中之一是:访问 dom 是被禁止的。
// instantiate a loader
const textureLoader = new THREE.ImageBitmapLoader();
// load a image resource
textureLoader.load(
// resource URL
url,
// onLoad callback
function ( imageBitmap ) {
const texture = new THREE.CanvasTexture( imageBitmap );
const material = new THREE.MeshBasicMaterial( { map: texture } );
// var serializedMaterial = material.toJSON();
// postMessage(serializedMaterial)
dracoLoader.decodeDracoFile(drcMesh,function(bufferGeometry){
var geometry;
geometry = new THREE.Mesh(bufferGeometry, material);
var serializedGeometry = geometry.toJSON();
postMessage(serializedGeometry);
});
},
// onError callback
function ( err ) {
console.log( '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' );
}
);
但是现在,当我在浏览器(chrome)开发人员工具中检查网络选项卡时,我看到了undefined error(not found)
.
我能够显示网格(没有纹理),当我显示它时,我又得到两个错误:
WebGL: INVALID_VALUE: texImage2D: bad image data
[.WebGL-00000A9800214880] GL_INVALID_OPERATION: Texture format does not support mipmap generation.
如果我在 HTML 端做了一些修改,比如:
var geometry = jsonLoader.parseObject(e.data);
快速复习:用于jsonLoader.parse
第一个用例。
现在:未定义的错误消失了。但是当我尝试显示网格时,我什么也看不到。
那么如何从工作人员发送纹理网格以及如何在主线程上处理它?
解决方案
推荐阅读
- android - 需要将手机点击的图片转换为base 64字符串并发送给服务器
- node.js - 使用节点在 pdf 中添加文本或图像
- python - 将带有skimage的非RGBA 4-tile多页tiff图像加载到dask数组中
- scikit-learn - 将 sklearn 模型打包为 HDF5 文件
- antd - 具有粘性标题和滚动条的 ant.design 表将列宽缩小到内容的大小,使空列的标题不可读
- html - 如何使 WordPress 页面模板具有响应性?
- function - 我正在尝试将值从可靠性库传递给函数,但没有太大成功。这是我的示例数据和代码
- laravel - eloquent的dosntHave方法为什么会超时以及如何调试
- python - 带有熊猫的列中的比较运算符
- javascript - 如何使用 copy(JSON.stringify(Object.entries) 从 JSON 中提取特定属性,同时在 chrome 控制台中过滤掉不需要的属性?