我正在尝试将缓冲区几何体导出到JSON文件。
以下是我正在使用的代码:
var output = object.geometry.toJSON();
try
{
output = JSON.stringify( output, null, '\t' );
output = output.replace( /[\n\t]+([\d\.e\-\[\]]+)/g, '$1' );
}
catch ( e )
{
output = JSON.stringify( output );
}
alert ("Done JSON ");
这会产生一个JSON文本对象,例如:
{
"metadata": {
"version": 4.4,
"type": "BufferGeometry",
"generator": "BufferGeometry.toJSON"
},
"uuid": "F871289F-C8FF-4760-A6EA-C9E5FD956702",
"type": "PlaneBufferGeometry",
"width": 7500,
"height": 7500,
"widthSegments": 15,
"heightSegments": 15
}
但是,几何体包含各种属性数据(位置,法线,颜色,UV)数组,这些数据未包含在JSON文本中。
我已将相关代码放在当前版本的THREE.js(R79)中(第12295行):
toJSON: function () {
var data = {
metadata: {
version: 4.4,
type: 'BufferGeometry',
generator: 'BufferGeometry.toJSON'
}
};
// standard BufferGeometry serialization
data.uuid = this.uuid;
data.type = this.type;
if ( this.name !== '' ) data.name = this.name;
if ( this.parameters !== undefined ) {
var parameters = this.parameters;
for ( var key in parameters ) {
if ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];
}
return data; // *** No attributes have been considered yet!
}
data.data = { attributes: {} }; // *** attributes are not defined yet!
从代码逻辑(并通过调试确认)出现"数据"在甚至考虑属性之前,从.toJSON函数返回对象。
这是一个错误还是我在这里遗漏了什么?
更新
U1:正如/ u / Radio /我建议将BufferGeometry转换为普通的THREE.geometry,然后运行.toJSON()。它工作正常,所有顶点数据都包含在JSON文件中。
U2:在我特定的PlaneBufferGeometry中,我在创建后修改了顶点位置。三个代码(上面)查找几何的.parameters属性,如果找到一个,它返回数据并退出.toJSON函数,而不继续在输出JSON文件中包含各种属性。这似乎很奇怪。
U3:我尝试从BufferGeometry中删除.parameters属性。之后,BufferGeometry.toJSON()函数确实生成一个输出,其中包含预期/所需的各种属性数组数据。这似乎并没有影响Sculpter的进一步工作(但我不确定这是一个安全的黑客)。