2
我試圖檢測用戶何時點擊了我的3D場景中的特定多維數據集 我已經看到一些類似的問題,但沒有一個與我有相似的問題。Three.js raycast生成空相交數組
我有一個立方體的3D數組,填充和顯示正常,但是當我的鼠標放下函數被調用時,相交數組總是空的 - 我看不出有什麼問題,並希望得到任何幫助。
我的渲染器設置像這樣:
function setupRenderer()
{
renderer = new THREE.WebGLRenderer({antialias: true});
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.setClearColorHex(0xEEEEEE, 1);
renderer.domElement.addEventListener('mousedown', onDocumentMouseMove, false);
$('body').append(renderer.domElement);
}
和事件處理程序是:
function onDocumentMouseDown(event)
{
console.log("mouse clicked!");
event.preventDefault();
if(event.target == renderer.domElement)
{
var mouseX = (event.clientX/window.innerWidth)*2-1;
var mouseY = -(event.clientY /window.innerHeight)*2+1;
var vector = new THREE.Vector3(mouseX, mouseY, 0.5);
projector.unprojectVector(vector, camera);
var raycaster = new THREE.Raycaster(camera.position, vector.subSelf(camera.position).normalize());
var intersects = raycaster.intersectObjects(cubes);
console.log("intersects.length: " + intersects.length);
if (intersects.length > 0) {
console.log("intersected objects");
/* do stuff */
}
}
}
您可以在http://kev-adsett.co.uk/experiments/three.js/experiment1/
ahh ok我沒有意識到傳入intersectObjects函數的數組必須是單個數組。這真的很有幫助,謝謝你的快速回復@WestLangley。也許如果我將我的數組重構爲兩個不同的單個數組,多維數據集網格之一以及存儲其位置的Vector3對象之一,那麼我可以將網格數組傳遞給intersectObjects函數。我會在午餐時嘗試這個,並報告回來! – kevatron400
嗚!兩個陣列的解決方案非常感謝。 (實際上,此時位置數組是不需要的,但我認爲當我開始改變立方體的位置時,這將是必需的)。 – kevatron400
我在場景中有不斷移動的元素,當時這不起作用......所以有什麼方法可以與移動元素相交? – Smit