我的three.js几何图形具有元数据。链接此元数据的最佳方法是什么,因为没有属性可以直接将其存储在对象本身中?
答案 0 :(得分:3)
您可以将用户数据存储在Object.userData对象中。
编辑:有人指出,几何图形没有userData ...
但是userData仍然可以使用并将被序列化,所以也许类似
myScene.userData.geometryMetas={}
and then populate with myScene.userData.geometryMetas[geometry.uuid]=YourMetaData
答案 1 :(得分:0)
您有三个选择。
只需将Attribute属性直接添加到three.js对象即可。
var myGeom = new THREE.Geometry();
myGeom.Attributes = Metadata;
这具有快速简便的优势。它的缺点是易于破解且有些脆弱(就像猴子修补一样),并且元数据不会包含在Geometry的toJSON()
方法中,这可能是您想要的,也可能不是。
只需将几何图形包装在具有其自己的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并重新包装时重新包装它们任何从中得到的东西。
每个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;
通过这种方式,您不必将属性数据与几何体一起传递,但是在需要时可用。