我遇到问题,使用.toJSON()
和.ObjectLoader()
。
我创建了一个具有位置的网格对象(Object3D)并将其转换为JSON。
mesh.position.set(path.x, path.y, path.z);
Mesh {
uuid: 'AAA36A25-18C6-43CD-AF14-4D12826A8C06',
name: '',
type: 'Mesh',
parent: null,
children: [],
up: Vector3 { x: 0, y: 1, z: 0 },
position: Vector3 { x: 358.04999999981374, y: -4499.83, z:
2521.2299999999814 },
var mesh_tojson = mesh.toJSON();
{ metadata: { version: 4.5, type: 'Object', generator: 'Object3D.toJSON' },
geometries:
[ { uuid: '0E18D023-CC64-4D83-AB28-C731BB1E5B1B',
type: 'OctahedronGeometry',
radius: 100,
detail: 0 } ],
materials:
[ { uuid: '055D52FD-0767-44D8-A62F-C1514FE38111',
type: 'MeshLambertMaterial',
color: 16776960,
emissive: 0,
depthFunc: 3,
depthTest: true,
depthWrite: true,
rotation: undefined,
linewidth: undefined } ],
object:
{ uuid: 'AAA36A25-18C6-43CD-AF14-4D12826A8C06',
type: 'Mesh',
matrix: [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ],
geometry: '0E18D023-CC64-4D83-AB28-C731BB1E5B1B',
material: '055D52FD-0767-44D8-A62F-C1514FE38111' } }
但是当我尝试加载JSON对象时,除了松开网格对象的position属性外,一切都很好。
var mesh = loader.parse(mesh.toJSON())
Mesh {
uuid: 'AAA36A25-18C6-43CD-AF14-4D12826A8C06',
name: '',
type: 'Mesh',
parent: null,
children: [],
up: Vector3 { x: 0, y: 1, z: 0 },
position: Vector3 { x: 0, y: 0, z: 0 },
如何在JSON对象中保存对象的位置并为场景加载?
答案 0 :(得分:1)
在code for .toJSON()
中,不包括位置和旋转。您可以手动将它们添加到JSON:
mesh.matrix.toArray( json.object.matrix )
您可能还需要在加载后手动重新应用它们,我不确定THREE.ObjectLoader是否会这样做。