当页面上只有一个目标 div(包含 renderer.domElement)时,我的 Three.js 脚本运行良好。只要我在目标 div 上方添加另一个具有固定高度和宽度的 div,ray.intersectObjects 就会返回 null。我怀疑我为射线创建的向量是否导致了问题。这是代码。
var vector = new THREE.Vector3( ( event.clientX / divWidth ) * 2 - 1, -( event.clientY / divHeight ) * 2 + 1, 0.5 );
projector.unprojectVector( vector, camera );
var ray = new THREE.Ray( camera.position, vector.subSelf( camera.position ).normalize() );
var intersects = ray.intersectObjects( myObjects, true );
关于如何解决这个问题的任何想法。
编辑:现在是 THREE.Raycaster
(three.js r.56)
原文由 ZedBee 发布,翻译遵循 CC BY-SA 4.0 许可协议
简短的回答是您必须考虑画布的
offset
。长答案取决于你的代码是如何编写的,所以我会给你两个答案,应该涵盖基础。
有很多可能的组合,因此您可能需要进行试验。此外,不同的浏览器可能会有不同的行为。
假设您的 HTML 是这样的:
你的 JS 是这样的:
方法1 为使下面的方法正常工作,将画布位置设置为 static ; margin > 0 和 padding > 0 都可以
方法 2 对于这种替代方法,将画布位置设置为 _固定_;设置顶部 > 0,设置左侧 > 0;填充必须为 0;保证金 > 0 是可以的
如果您想进行实验,这里有一个小提琴: https ://jsfiddle.net/4dnwk39v/
编辑:小提琴更新为 three.js r.143