簡體   English   中英

管理Threejs Geometry的元數據

[英]Managing Metadata of threejs Geometry

我的three.js幾何圖形具有元數據。 鏈接此元數據的最佳方法是什么,因為沒有屬性可以直接將其存儲在對象本身中?

您可以將用戶數據存儲在Object.userData對象中。

編輯:有人指出,幾何沒有userData ...

但是userData仍然可以使用並且將被序列化,所以也許類似

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

您有三個選擇。

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;

這樣,您就不必通過幾何傳遞屬性數據,但是在需要時可以使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM