【发布时间】:2020-08-01 17:53:34
【问题描述】:
我正在制作2D scatterplot with a tooltip,目前检测某个点何时悬停的光线投射器已损坏。工具提示仅在触摸对象时激活,这是正确的行为,但它显示来自在 x/y 平面上甚至不接近的点的完全随机数据,并且即使没有其他点靠近该对象也会更改信息盘旋在上方。谁能帮我调试这种行为?下面是一些相关代码(其余的可以在上面的链接中找到):
...loading in points (stored in data_points array), creating scene, etc.
raycaster = new THREE.Raycaster();
raycaster.params.Mesh.threshold = 20;
view.on("mousemove", () => {
let [mouseX, mouseY] = d3.mouse(view.node());
let mouse_position = [mouseX, mouseY];
checkIntersects(mouse_position);
});
function mouseToThree(mouseX, mouseY) {
return new THREE.Vector3(
mouseX / viz_width * 2 - 1,
-(mouseY / height) * 2 + 1,
1
);
}
function checkIntersects(mouse_position) {
let mouse_vector = mouseToThree(...mouse_position);
raycaster.setFromCamera(mouse_vector, camera);
let intersects = raycaster.intersectObjects(scene.children, true);
if (intersects[0]) {
let sorted_intersects = sortIntersectsByDistanceToRay(intersects);
let intersect = sorted_intersects[0];
let index = intersect.faceIndex;
let datum = data_points[index];
showTooltip(mouse_position, datum);
} else {
hideTooltip();
}
}
function sortIntersectsByDistanceToRay(intersects) {
return _.sortBy(intersects, "distanceToRay");
}
...tooltip functions, details
任何帮助将不胜感激。谢谢!
【问题讨论】:
标签: javascript d3.js three.js