您必須創建一個raycaster。 (r69)
mouse_vector = new THREE.Vector3(),
mouse = { x: 0, y: 0, z: 1 };
var vector = new THREE.Vector3();
var raycaster = new THREE.Raycaster();
var dir = new THREE.Vector3();
function onMouseDown(event_info)
{
event_info.preventDefault();
mouse.x = (event_info.clientX/window.innerWidth) * 2 - 1;
mouse.y = - (event_info.clientY/window.innerHeight) * 2 + 1;
mouse_vector.set(mouse.x, mouse.y, mouse.z);
mouse_vector.unproject(camera);
var direction = mouse_vector.sub(camera.position).normalize();
ray = new THREE.Raycaster(camera.position, direction);
ray.set(camera.position, direction);
intersects = ray.intersectObjects(scene.children, true);
if(intersects.length)
{
intersects.forEach(function(clicked)
{
// Your stuff like
if (clicked.object.typ == 'yourObject')
{
//Event on click..
}
});
}
}
thanks @mcode。這些信息有所幫助,但我認爲如果我旋轉相機,那麼光線和物體之間的交叉點會改變嗎?由於光線的原點附着在相機上。我需要的是即使旋轉相機,對象上的一個點也應該給我相同的座標,而不管相機的旋轉。 – stuli
我想使用的是,如果.obj文件(一個面向相機,另一個不面向相機)上有兩個點,我想單擊面向相機的一個。我不應該點擊不面向相機的點。我們可以通過raycaster實現嗎? – stuli
你可以在Paint中繪製草圖嗎?很難解釋3D可視化並且很難理解它。 – mcode