我有一个包含几个随机数的散点图Sprite
用作数据点的对象。我想检测鼠标指针(光标)和Sprite
对象。我用来检测交叉点的设置如下:
var projector = new THREE.Projector();
window.addEventListener('mousedown', function (ev) {
if (ev.target == renderer.domElement) {
var vector = new THREE.Vector3((ev.clientX / window.innerWidth) * 2 - 1, -(ev.clientY / window.innerHeight) * 2 + 1, 0.5);
var projector = new THREE.Projector();
projector.unprojectVector(vector, camera);
var raycaster = new THREE.Raycaster(camera.position, vector.sub(camera.position).normalize());
var intersects = raycaster.intersectObjects(particles);
console.log(intersects[0]);
}
}, false);
我遇到的问题是,当我单击Sprite
从远处观察对象(即单击数据点而不放大绘图),似乎没有返回任何内容raycaster.intersectObjects(particles)
。换句话说,长度intersects
为 0。所需的行为是当单击数据点时(即,数据点出现在光标下方),raycaster.intersectObjects()
返回光标下的对象。
我已经根据迄今为止所做的事情创建了一个小提琴:http://jsfiddle.net/jmg157/ynFzw/ http://jsfiddle.net/jmg157/ynFzw/
一如既往,非常感谢!
当你使用Raycaster
,你需要确保在你的CSS中设置
body { margin: 0 }
或等效的东西,否则,检测将被抵消。
另外,Raycaster
实施Sprites
需要改进。
目前,如果光线经过精灵位置的一定距离内,就会发生检测。检测区域为半径为一个圆sprite.scale.x
。不考虑精灵的形状。
三.js r.64
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)