Three.js 3.js,Raycaster,射线阵列?
我有两条光线,一条在摄影机中心高亮显示网格,另一条在单击时高亮显示网格Three.js 3.js,Raycaster,射线阵列?,three.js,raycasting,Three.js,Raycasting,我有两条光线,一条在摄影机中心高亮显示网格,另一条在单击时高亮显示网格 /。。。 Raycaster click=new THREE.Raycaster(); raycasterCenter=new-THREE.Raycaster(); // ... 函数animate(){ 请求动画帧(动画); // ... //清晰相交 对于(变量i=0;i
/。。。
Raycaster click=new THREE.Raycaster();
raycasterCenter=new-THREE.Raycaster();
// ...
函数animate(){
请求动画帧(动画);
// ...
//清晰相交
对于(变量i=0;i 如果(相交[0]。距离我认为没有光线阵列。即使可以构造阵列,光线投射器相交检查也会检查每个网格的每条光线,始终需要检查2*n(n:场景数量。子对象)也许我在射线阵列的概念中没有得到什么东西。你是说:raycaster.setFromCamera([center,mouse],camera)
?但是,如果你得到了相交
,你将如何区分哪个对象与哪个光线相交?它将需要重写Raycaster.js
。只有在真正需要的时候才需要考虑资源。我刚接触过Three.js,非常复杂,我正在尝试提前思考。是的,类似于raycaster.setFromCamera([center,mouse],camera)
我想到了,在intersectObjects(scene.children)
中找到这个光线(可能通过索引)和那个对象。然后我想事情就结束了。
// ...
raycasterClick = new THREE.Raycaster();
raycasterCenter = new THREE.Raycaster();
// ...
function animate() {
requestAnimationFrame(animate);
// ...
// clear intersected
for (var i = 0; i < INTERSECTED.length; i++) {
INTERSECTED[i].material.emissive.setHex(INTERSECTED[i].currentHex);
INTERSECTED.splice(i, 1);
}
// click
raycasterClick.setFromCamera(mouse, camera);
var intersects = raycasterClick.intersectObjects(scene.children);
for (var i = 0; clickedIn && i < intersects.length; i++) {
var length = INTERSECTED.push(intersects[0].object) - 1;
INTERSECTED.currentHex = INTERSECTED[length].material.emissive.getHex();
INTERSECTED[length].material.emissive.setHex(0xff0000);
}
// center
raycasterCenter.setFromCamera(center, camera);
var intersects = raycasterCenter.intersectObjects(scene.children);
for (var i = 0; i < intersects.length; i++) {
var length = INTERSECTED.push(intersects[0].object) - 1;
INTERSECTED.currentHex = INTERSECTED[length].material.emissive.getHex();
INTERSECTED[length].material.emissive.setHex(0xff0000);
if(intersects[0].distance<=2&&controls.moveZ==-1)controls.moveZ=0;
}
// ...
}