Three.js-如何反序列化几何体.toJSON()?(几何体.fromJSON在哪里?)
Three.js - How to deserialize geometry.toJSON()? (where is geometry.fromJSON?)
我正在尝试将一些Geometry
加载和处理卸载到web工作者中。要将其发送回主线程,需要序列化Geometry
实例,而Geometry.prototype.toJSON()
似乎正是用于这种类型的事情。
但我不知道如何在主线程中将该对象转换回Geometry
实例。toJSON()
输出应该如何使用?
附言:我看过这个相关的问题,但它似乎过时了。toJSON()
还没有出现在API中。公认的答案有点复杂,需要我在主线程中做一些原始工作。
如果我理解正确,问题是:
- 您有一个要加载为几何体的文件(obj、stl等)
- 您希望在WebWorker中加载此文件
- 然后,您需要将几何体发送回主脚本
- 因此,您考虑将文件作为JSON发送回主线程,因为不支持发送对象
- 然后在主线程上将json转换为几何体
这样做的问题是,从JSON字符串转换为几何体是另一种加载操作(这就是为什么有JSONLoader的原因),所以在这一点上,您还可以在主线程上完成加载。
我使用的方法是将文件加载到顶点和法线的平面阵列中,然后将它们发送回主线程以添加到BufferGeometry中。你也可以使用可转移的物体来获得更多的速度。
// worker.js
var vertices = new Float32Array( faces * 3 * 3 );
var normals = new Float32Array( faces * 3 * 3 );
// Load your file into the arrays somehow.
var message = {
status:'complete',
vertices: vertices,
normals: normals
};
postMessage(message, [message.vertices.buffer, message.normals.buffer]);
// app.js
onmessage = function (event) {
var vertices = event.data.vertices;
var normals = event.data.normals;
var geometry = new THREE.BufferGeometry();
geometry.addAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) );
geometry.addAttribute( 'normal', new THREE.BufferAttribute( normals, 3 ) );
var material = new THREE.MeshPhongMaterial();
var mesh = new THREE.Mesh( geometry, material );
// Do something with it.
};
您可以使用JSONLoader
对几何体进行非序列化,如下所示:
var geometry = new THREE.Geometry();
var serializedGeometry = geometry.toJSON();
var jsonLoader = new THREE.JSONLoader();
var result = jsonLoader.parse(serializedGeometry.data);
var unserializedGeometry = result.geometry;
为什么不直接使用JSONLoader?
myloader = new THREE.JSONLoader()
myloader.load("path/to/json", function(geometry,material){
mesh = new THREE.Mesh(geometry,material)
scene.add(mesh)
})
或者以与相同的方式加载JSON文件
相关文章:
- 如何将Three.js场景中的几何体导出为已修改的OBJ
- 我是否可以在渲染过程中使用三.js合并每一帧中的几何体
- 控制立方体或其他几何体的每个面,分为三.js
- 三个JS框几何体,渲染警告:渲染计数或素数为0
- Three.js(r75)-为什么是Three.几何体没有用于存储边的数组
- Three.js-如何反序列化几何体.toJSON()?(几何体.fromJSON在哪里?)
- three.js无法在three.Points几何体中渲染法线
- 在Three.js中为几何体中的顶点指定颜色
- turf.js可以用来查找和修复坏的geojson几何体吗
- three.js为几何体中的每个顶点指定不同的颜色(渐变)
- 如何将视频映射到三个.js几何体上
- 三.js - 在由管几何体构造的网格上移动纹理
- 三.js渲染普通几何体的白色部分
- 将基本几何体转换为三个.js
- 第三.js自定义几何体光线投射器捕获了错误的对象
- 在 Three.js 中渲染自定义几何体
- Three.js:缩放几何体后出现错误的BoundingBox
- 顶点在三个.js中移动后坐标几何体
- 如何克隆three.js几何体
- 如何在Three.js中挤出圆形几何体