2013-08-19 65 views
16

我有一個與three.js相關的webgl問題。我想附加一個對象的信息。例如,當我點擊某個對象時,我想要檢索與該對象相關的一些信息,如URL,然後使用該信息運行一個函數。使用three.js,我可以將信息附加到對象,如URL嗎?

我使用查找對象的代碼是:

var vector = new THREE.Vector3((event.clientX/window.innerWidth) * 2 - 1, -(event.clientY/window.innerHeight) * 2 + 1, 0.5); 
    projector.unprojectVector(vector, camera); 

    var raycaster = new THREE.Raycaster(camera.position, vector.sub(camera.position).normalize()); 

    var intersects = raycaster.intersectObjects(objects); 

    intersects[0].object.material.color.setHex(Math.random() * 0xffffff); 

最後一行是我當前如何操作的對象。數組objects只是所有對象的數組。問題在於我對Raycaster或intersectObjects是如何工作還不夠了解,或者不知道如何將任何信息綁定到對象以便稍後可以調用。

回答

17

的確,您可以將自定義用戶數據設置爲Three.js中的對象。這裏的關鍵是Object3D,它是所有場景圖形對象的基礎。該文檔有一個名爲

Object3D.userData; 

這可裝載您所選擇的對象,當Raycaster類檢索您的相交,你可以簡單地在這一點上直接訪問其屬性。

二傳手的碰撞

window.location = intersects[0].object.userData.URL; 
+0

完美的過程中初始化或運行時

Object3D.userData = { URL: "http://myurl.com" }; 

消氣!正是我在找什麼。 – JVE999

+2

這樣做和簡單說'Mesh.myObject = {key:value}'有什麼區別嗎?''我認爲它基本上是一樣的東西不是? –

+3

只有想到的區別和重要的區別是,克隆Object3D將保留userData屬性。 –

相關問題