javascript - 如何检测three.js sprite上的点击事件
问题描述
我想在 three.js sprite 上检测点击事件,代码如下:
function bindEvents(state) {
let intersected;
function onDocumentMouseDown(event) {
event.preventDefault();
const mouseX = (event.clientX / window.innerWidth) * 2 - 1;
const mouseY = - (event.clientY / window.innerHeight) * 2 + 1;
const camera = state.threeD.elements.camera;
const raycaster = state.threeD.raycaster;
raycaster.setFromCamera(new THREE.Vector2(mouseX, mouseY), camera);
var intersects = raycaster.intersectObjects(state.clickables?state.clickables:[]);
if (intersects.length > 0) {
if (intersected) intersected.material.map = intersected.currentMap;
intersected = intersects[0].object;
intersected.currentMap = intersected.material.map;
intersected.material.map = selectCityTexture(128, '#cccccc', 'cccccc');
}
}
document.addEventListener('mousedown', onDocumentMouseDown, false);
document.addEventListener('touchstart', onDocumentMouseDown, false);
}
这几乎可以工作,鼠标位置偏移了一些。可能是一些计算错误,我不知道上面的代码是如何工作的,请帮忙。
解决方案
const mouseX = (event.clientX / window.innerWidth) * 2 - 1;
const mouseY = - (event.clientY / window.innerHeight) * 2 + 1;
这些被改变了
const mouseX = (event.clientX / canvas.width) * 2 - 1;
const mouseY = - (event.clientY / canvas.height) * 2 + 1;
推荐阅读
- python - 对现有对象应用 s3 生命周期策略
- wso2 - 如何将传输 vfs 中存在的文件数据保存到 WSO2 中的参数?
- javascript - 无法使用 lerna 传递命令行参数
- python - 如何在 Python 中正确设置这些条件?
- key-bindings - Ubuntu 20.04 mate marco 硬编码键绑定
- html - Angular中发生403错误时如何从DOM中删除图像元素
- ruby-on-rails - 如何为 simple_form 自定义我的rich_text_area 中的行数?
- plot - 如何在 Julia 的绘图上放置数据点标签
- python-3.x - 网站无休止地重定向,直到在scrapy中达到最大重定向
- linux - 如何在 perf probe 中使用 -V 选项?