javascript - 将 Three.js 的 Raycaster 限制为 HTML 的特定部分。避免偏移

标签 javascript html three.js raycasting

我正在使用 Three.js Raycaster用于对象拾取。 我的 HTML 由两个主要部分组成 - 顶部的导航栏(头部部分)和底部部分,我的渲染发生在底部(主体部分)。

我的问题是,通过这个“星座”,我得到了一个恼人的 Raycaster 偏移量。 ,大约是导航栏高度的大小。所以我认为这就是问题所在。当我尝试取出导航栏时 - 我确实得到了没有偏移的良好结果。

显然我希望这段代码能够在多个设备上运行(可能对特定浏览器有严格要求,但对设备则不然),因此“手动计算像素”是不可行的。

我尝试将渲染部分放入 <iframe> 中,它减少了偏移量,但仍然存在(有人知道为什么吗?)。 我曾考虑过检索导航栏的高度并在光线转换时将其考虑在内,但在我看来这就像一个补丁。我宁愿采用通用、稳健的方式。

我也尝试过frameborder="0" scrolling="no"在我的<iframe>设置,没有帮助。

我是 HTML/js/Three.js 新手,所以答案可能很简单,我无意冒犯。

最佳答案

找到了!

感谢this jsfiddle ,第 [58-59] 行表示鼠标坐标采用以下值:

mouse.x=((event.clientX - renderer.domElement.offsetLeft)/renderer.domElement.width )*2-1;
mouse.y= -((event.clientY - renderer.domElement.offsetTop)/renderer.domElement.height)*2+1;

正如您所看到的 - 渲染器在其 DOM 元数据中保存偏移量。 显然...

欢迎评论。

关于javascript - 将 Three.js 的 Raycaster 限制为 HTML 的特定部分。避免偏移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35412362/

相关文章:

javascript - 隐藏仅包含 &lt;script&gt; 标签的 div

javascript - Threejs 从场景中删除所有对象

Three.js 未捕获的 SecurityError : Failed to execute 'texImage2D' on 'WebGLRenderingContext' :

javascript - 如何重置子元素的状态?

javascript - 使用 jQuery Clone 选择要复制的元素

javascript - JSON 在带有空白数据的 jquery 中添加一行

javascript - 以编程方式重定向到 react 路由器 v6 中的路由的问题

html - 表单提交后保持选中单选按钮

javascript - 不运行 CSS 的成功动画教程

reactjs - 如何正确使用 drei useGLTF