Three.js BufferGeometry.toJSON - 为什么不导出属性数据?

时间:2016-07-21 17:29:23

标签: javascript json three.js

我正在尝试将缓冲区几何体导出到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的进一步工作(但我不确定这是一个安全的黑客)。

0 个答案:

没有答案