管理Threejs Geometry的元数据

时间:2018-08-02 05:46:14

标签: javascript three.js

我的three.js几何图形具有元数据。链接此元数据的最佳方法是什么,因为没有属性可以直接将其存储在对象本身中?

2 个答案:

答案 0 :(得分:3)

您可以将用户数据存储在Object.userData对象中。

编辑:有人指出,几何图形没有userData ...

但是userData仍然可以使用并将被序列化,所以也许类似

myScene.userData.geometryMetas={}
and then populate with myScene.userData.geometryMetas[geometry.uuid]=YourMetaData

答案 1 :(得分:0)

您有三个选择。

1。猴子修补

只需将Attribute属性直接添加到three.js对象即可。

var myGeom = new THREE.Geometry();
myGeom.Attributes = Metadata;

这具有快速简便的优势。它的缺点是易于破解且有些脆弱(就像猴子修补一样),并且元数据不会包含在Geometry的toJSON()方法中,这可能是您想要的,也可能不是。

2。包装纸

只需将几何图形包装在具有其自己的Attributes属性的新对象中即可。您可以使用普通对象:

var myGeom = {
    geometry: new THREE.Geometry(),
    attributes: Metadata
};

或创建一个构造函数:

function MyGeom(geometry, attributes) {
    this.geometry = geometry;
    this.attributes = attributes;
}
var myGeom = new MyGeom(new THREE.Geometry, Metadata);

缺点是,您只需随身携带THREE.Geometry对象的任何地方,现在都必须使用包装的对象,并在需要调用Three.js API并重新包装时重新包装它们任何从中得到的东西。

3。将元数据分开

每个THREE.Geometry对象都有一个唯一的uuid属性。您可以将此uuid用作单独的元数据对象中的键,并且仍然可以与常规Three.js对象一起使用。

var AllMetadata = {}; // Should be global or assigned to a project namespace
var myGeom = new THREE.Geometry();
AllMetadata[myGeom.uuid] = Metadata;

通过这种方式,您不必将属性数据与几何体一起传递,但是在需要时可用。