我有一个球体(地球仪),球面上有物体(图钉),这些物体的DOM元素(标签)是根据图钉位置计算出来的,以2D世界为基础。
我的问题是当图钉被拖到球体后面时(通过鼠标拖动或动画),我需要隐藏与之关联的DOM元素(标签),使文本标签不可见。
我的逻辑是,如果我可以得到在3D世界中的图钉告诉我它是否在球体后面,那么我就可以隐藏与之关联的标签。
完整代码请参考Codepen。
下面是我研究出来的函数:
我研究了许多帖子,但并没有真正得到所需的结果:
我的问题是当图钉被拖到球体后面时(通过鼠标拖动或动画),我需要隐藏与之关联的DOM元素(标签),使文本标签不可见。
我的逻辑是,如果我可以得到在3D世界中的图钉告诉我它是否在球体后面,那么我就可以隐藏与之关联的标签。
完整代码请参考Codepen。
下面是我研究出来的函数:
function checkPinVisibility() {
var startPoint = camera.position.clone();
for (var i = 0; i < pins.length; i++) {
var direction = pins[i].position.clone();
var directionVector = direction.sub(startPoint);
raycaster.set(startPoint, directionVector.clone().normalize());
var intersects = raycaster.intersectObject(pins[i]);
if (intersects.length > 0) {
// ?
}
}
}
我研究了许多帖子,但并没有真正得到所需的结果:
- ThreeJS:如何检测对象是否被渲染/可见
- Three.js - 如何检查对象是否对相机可见
- http://soledadpenades.com/articles/three-js-tutorials/object-picking/