我正在使用Chrome实验的地球http://globe.chromeexperiments.com,我想点击任何颜色坐标来显示弹出窗口但是没有调用事件监听器。有人可以帮助我怎么做吗?
答案 0 :(得分:1)
您可以尝试将相机中的光线投射到风景中然后获取拦截。请参阅rayCaster的文档。
您要做的是创建一个新的rayCaster对象,然后获取用户屏幕的鼠标坐标。您需要在画布的父元素上创建某种“onclick”事件。 一旦事件发生,rayCaster对象就有一个处理我们情况的属性“setFromCamera”。但是,您需要为它提供一个列表,其中包含您想要交叉的所有对象,即所有矩形。
所以你的代码看起来像这样,请注意我使用了jQuery:
var rayCaster = new THREE.Raycaster();
var onClickEventHandler = function(e) {
//Save the mouse data as a vector
//width and height pertain to the size of the canvas.
var mousePosition = new THREE.Vector3((e.offsetX / width) * 2 - 1,
-(e.offsetY / height) * 2 + 1,
0.5);
rayCaster.setFromCamera(mousePosition, camera);
//"objects" is the array of meshes that you care about the user intersecting
var intersects = rayCaster.intersectObjects(objects);
}
“intersects”数组中包含的内容是“objects”数组中的所有项目,这些项目按照交叉顺序与光线相交。您可能对此数组的第一个元素感兴趣。
我不知道这个globe实用程序是否提供了更好的方法,我展示的是在风景中选择对象的通用方法。