有一個很好的例子here
可以實現,使用raycaster項目射線和檢測交叉點。
這是您需要用於拾取物體的部分代碼。
// find intersections
raycaster.setFromCamera(mouse, camera);
var intersects = raycaster.intersectObjects(scene.children);
if (intersects.length > 0) {
if (INTERSECTED != intersects[ 0 ].object) {
if (INTERSECTED) INTERSECTED.material.emissive.setHex(INTERSECTED.currentHex);
INTERSECTED = intersects[ 0 ].object;
INTERSECTED.currentHex = INTERSECTED.material.emissive.getHex();
INTERSECTED.material.emissive.setHex(0xff0000);
}
} else {
if (INTERSECTED) INTERSECTED.material.emissive.setHex(INTERSECTED.currentHex);
INTERSECTED = null;
}
renderer.render(scene, camera);
更新1: 如果所有對象都合併到一個單一的BufferGeometry:
- 有一個看看這個例子:webgl_interactive_buffergeometry
會告訴你如何挑選面孔,而不是對象。所以我的猜測是:
//pseudo code
foreach(object in bufferGeometry){
foreach(face in object){
face.addAttribute (name[object], attribute[object])
}
}
因此,對於每個對象的創建自定義屬性,並將它傳遞給它的面孔,你可以:
相交臉
獲取其自定義屬性
選擇具有該屬性的所有面 - >對象牛逼
我沒有測試過,但我想它應該工作,讓我知道:)
但將在得到我的具體挑選對象,它是在一個緩衝的幾何? – AlvinfromDiaspar