Three.js 光线投射器可以与组相交吗?

2024-04-30

我想知道我的光线投射器是否正在查看我已加载的 OBJ。由于从 Cinema4D 导出的方式,我相信 OBJ 是一个具有 3 个子级的 THREE.Group,而不是 THREE.Object。我可以更改我的 raycaster 代码行来查找该组而不是对象吗?

raycaster.set(controls.getObject().position, controls.getDirection(), 0, 40)

var intersects = raycaster.intersectObjects(scene.children, true);

     if (intersects.length > 0) {
      //CURRENTLY INTERSECTING SOMETHING
      for (var i = 0; i < onOffCubes.length; i++) {
      //if the first thing the raycaster sees is a one of my cubes
        if (intersects[0].object == onOffCubes[i]) {
                ExperiencesData[i].userClose = true
            }
         }
       }

onOff Cubes 是 6 个 OBJ/THREE.js 组的数组:

Console.log(onOffCubes[0]) is this: enter image description here


很近。相交对象是一个网格,该网格的父级是该组。您需要匹配相交的父对象而不是相交的对象。那是:

intersects[ 0 ].object.parent === onOffCubes[ i ]

而不是:

intersects[ 0 ].object === onOffCubes[ i ]

TL;DR

为了测试类似的结构,我生成了六组,每组三个网格,每组网格共享相同的材质。请注意,onOffCubes 不是 THREE.js 组,而是一组组的数组。这就像原始海报的 onOffCubes:

var onOffCubes = []
for ( var i = 0; i < 6; i++ ) {
    var material = new THREE.MeshBasicMaterial({ color: 0xee55aa })
    var group = new THREE.Group()
    for ( var j = 0; j < 3; j++ ) {
        var mesh = new THREE.Mesh( geometry, material );
        mesh.position.x = Math.random() * 100 - 50;
        mesh.position.y = Math.random() * 100 - 50;
        mesh.position.z = Math.random() * 200 - 200;
        group.add( mesh );
    }
    onOffCubes.push( group )
    scene.add( group )
}

检查全场景

var intersects = raycaster.intersectObjects( scene.children, true );

或仅检查 OffCubes

var intersects = raycaster.intersectObjects( onOffCubes, true );

与原始海报基本相同的代码,只需一个修复:

if (intersects.length > 0) {
    for (var i = 0; i < onOffCubes.length; i++) { 
        if (intersects[ 0 ].object.parent === onOffCubes[ i ]) {
            // What I tested with
            //intersects[ 0 ].object.material.color.set( 0xff0000 )
            // Your code
            ExperiencesData[i].userClose = true
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Three.js 光线投射器可以与组相交吗? 的相关文章

  • 请解释与 Google Chrome 扩展程序的后台通信

    我已经阅读并重新阅读了此页面 并运行了示例 http code google com chrome extensions background pages html http code google com chrome extension
  • ant-d upload中如何为removeFile添加PopConfirm一个图片文件

    我正在使用 Ant d Upload 通过本地系统上传文件 然后单击文件预览图像上的删除图标 图像文件将被删除 我想添加一个弹出确认 所以我尝试在 onRemovefunction 中添加确认作为承诺但它不起作用 它在浏览器中显示警报 on
  • 为什么 jQuery 点击事件会多次触发

    我这里有这个示例代码http jsfiddle net DBBUL 10 http jsfiddle net DBBUL 10 document ready function creategene click function confir
  • 如何通过 HTML 按钮播放声音

    我目前通过网站播放音乐的方法是通过 HTML 音频标签 不过我希望能够通过 HTML 按钮来播放它 该按钮应该能够在播放和停止之间切换音乐 我在 JSFiddle 创建了一个示例 但不知道如何实现它 有人可以告诉我如何使用我的 JSFidd
  • 使用模态表单 ajax 超出 HTMLFormElement.toString 的最大调用堆栈大小

    我想使用模态窗口中的 ajax 请求提交表单 单击此链接可打开该模式 a class btn btn primary i class fa fa edit i Write a review a 模态窗口 div class modal fa
  • iframe 重新加载按钮

    我浏览了很多网站 但似乎没有一个能正常工作 或者我不明白它们 我想要一个刷新某个 iframe 的简单按钮 该按钮将位于父页面上 并且 iframe 名称为 Right 有很多方法可以做到这一点 假设这个iframe markup 我们可以
  • v-file-input .click() 不是函数

    我试图以编程方式触发 v file input 的 click 事件 因为它在 Vuetify 的文档中 但它显示一个错误this refs imagePicker click is not a function我在这里错过了什么吗 代码重
  • 使用 jquery 将字符串数组转换为整数

    我正在尝试将 jquery 中的字符串数组转换为整数数组 这是我的尝试 var cdata data values split each cdata function i l l parseInt l 我认为在这种情况下你不需要使用 Jqu
  • 如何清除WebGL中的矩形区域?

    WebGL 有一个clear清除整个表面的方法 清除表面的特定矩形的最佳方法是什么 例如 我想将一个从 50 50 开始的 100x100 像素框设置为全零 ARGB 0 0 0 0 我现在能想到的就是用一个写入零的片段着色器绘制一个四边形
  • 使水平滚动条始终可见,即使底部不在视图中

    我将用一个片段来开始这个问题 该片段几乎显示了我想要完成的任务 wrapper overflow hidden display flex sidebar min width 200px background 333 color FFF co
  • 是否可以使用打字稿映射类型来创建接口的非函数属性类型?

    所以我正在研究 Typescript 的映射类型 是否可以创建一个接口来包装另一种类型 从而从原始类型中删除函数 例如 interface Person name string age number speak void type Data
  • 有关于 PHP 中的 V8JS 的文档吗?

    有没有关于V8JS的文档 我是否只需要标准 PHP 或一些扩展即可使用 V8JS 我将非常感谢有关 PHP 中的 V8JS 的任何信息 要求 PHP 5 3 3 和 V8 库和标头安装在正确的路径中 Install http www php
  • window.showModalDialog 的等效跨浏览器解决方案是什么?

    window showModalDialog 的等效跨浏览器解决方案有哪些 showModalDialog 在 IE 和 FF 3 中引入 我个人认为没有 但是有很多 UI 工具包提供了这样的功能 例如jQuery UI http jque
  • 从多维无穷大数组中删除数组元素

    我想删除一个特定元素 例如 我想删除元素id 76在下面的数组中 而且 数组可以无限地组合在一起 这里的问题是我无法刷新页面 因为我使用 Vue js 进行即时操作 如果我能做到这一点 我的下一个问题可能是如何在我现在想要的地方添加一个元素
  • Jquery:选择菜单以显示和隐藏某些div元素

    我正在创建一个选择菜单 根据所选选项显示和隐藏某些 div 像这样的东西
  • 加载另一个 JS 脚本后加载

    这是我的代码 very big js file lots of html stuff 问题是 这些是异步加载的 有没有办法等待第二个脚本直到第一个脚本加载 如果您使用 jQuery 有一个非常简单的方法可以通过获取脚本 https api
  • 需要js、d3 和 nvd3 集成

    我面临整合的问题要求 questions tagged requirejs with d3 questions tagged d3 and nvd3 questions tagged nvd3 我找到了一个使用 require 的简单解决方
  • 如何获取使用 .map 渲染的第一个元素的 ref?

    我需要在几行中显示视频 卡片 的缩略图 并重点关注第一个缩略图 我使用嵌套地图进行了显示 该代码基本上迭代视频数组并返回多行视频 我们如何关注第一个渲染的元素 我认为我们需要获得第一个要聚焦的元素的引用 但是我们如何在这里设置 ref 并在
  • Express.js Passport认证自动失败跳过策略

    UPDATE 我已将代码从护照本地注册内部移至单独的处理程序 并且运行良好 问题在于 Passport 和本地注册的使用 但我不知道为什么 我使用 Node js Express Passport 进行身份验证和注册设置 这是以前使用过的标
  • 我可以使用 jQuery 动态创建文件(及其内容)吗? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 这是我的 HTML 代码 ul li

随机推荐

  • 无法使用 vcpkg 清单引用 poco[sqlite3]

    我正在使用 vcpkg 的清单功能来引用我的项目所具有的依赖项 我想使用 Poco 的 SQLite3 包装器 但我不知道如何在 vcpkg json 文件中引用它 当我使用poco sqlite3 vcpkg 给我一个错误 指出我的清单文
  • HTML5 气泡消息

    输入字段有一个新的 HTML5 属性required提交表单且字段为空时会弹出气泡消息 有什么办法可以弹出带有不同文本的相同气泡吗 我想将它用于不同的验证 不仅仅是它是否为空 以下是 Chrome 中此气泡 弹出窗口 的屏幕截图 HTML5
  • 如何在记事本++中重复该行?

    如何在记事本 中重复该行 例如我有以下输入 a 01 a 02 a 03 a 04 我希望它成为 a 01 a 01 a 02 a 02 a 03 a 03 a 04 a 04 所以每一行都应该显示twice 打开搜索对话框并写入 Find
  • 即使未指定 @Load,Objectify 也会在 Ref 后面加载对象

    我有一个引用用户对象的帐户对象 Cache Entity public final class Account Id Long id Index private Ref
  • 在 Google Chrome/Chromium 和 Safari 中拖放文件上传?

    Firefox 3 6 中可以实现拖放文件上传 给出类似的东西 Firefox 3 6 中的本机拖放文件上传 https stackoverflow com questions 2121018 native drag drop file u
  • 如何在代码中设置iPhone标签栏图标?

    我对几个不同的视图使用相同的 ViewController 当为特定视图实例化 ViewController 时 是否有一种简单的方法可以通过代码指定选项卡栏图标 yourViewController tabBarItem UITabBar
  • 如何使用Java泛型来避免强制转换?

    对于查询 提出于link https stackoverflow com questions 26192111 how to compare objects with different types 建议使用 Java 泛型以避免难以评估项
  • Angular 2 根据角色/声明显示/隐藏组件/零件

    我试图了解有关角度应用程序安全方面的最佳实践 可以说我有一个包含模型详细信息屏幕的视图 根据给定用户的角色 权限 例如 从 jwt 声明中获得 我希望能够做的是 根据用户是否具有特定角色的事实启用 禁用某些输入字段 因此 实际上有些角色可以
  • 如何在 Swift 中使用 UILocalNotification

    我正在尝试弄清楚如何快速设置 UILocalNotification 但我运气不佳 我正在尝试这个 var notification UILocalNotification notification timeZone NSTimeZone
  • 本地化 html 文档(事后看来)

    我正在用 PHP 构建一个 Web 应用程序 我已经决定 在整个过程中 以不同的语言提供该应用程序 我的问题是这样的 我不想费力地浏览模板文件中的所有 HTMl 代码来查找需要用动态生成的 lang 变量替换的 单词 有没有一个工具可以突出
  • 我可以在 Azure Pipelines 中对变量进行子字符串化吗?

    我正在寻找一种方法来定义我的变量azure pipelines yml我可以在其中子串的文件 Build SourceVersion gt 仅使用前 7 个字符 文档中似乎没有可以执行此类字符串操作的内置函数 我有什么遗漏的吗 我的另一种方
  • 具有 OpenGL ES 3.1 上下文的 GLSurfaceView

    我正在使用 OpenGL 开发 Android 我知道如何使用GLSurfaceView及其自定义派生类 使用以下方法创建 OpenGL ES 2 0 上下文GLSurfaceView setEGLContextClientVersion
  • AngularJS - 将外部 html 文件包含到模态中

    我正在使用 AngularJS 并且有一个 html 页面 其中包含多个引导模式 这个 html 文件由于包含了所有这些模态而变得有点繁重 是否可以在不失去范围的情况下将外部 html 文件包含到这些模态中 如果您使用 Angular UI
  • TYPO3:如何将页面内容插入模板

    我有一些内容想要出现在 TYPO3 网站的多个页面上 我可以将其插入模板中 但我还希望该内容可以在富文本编辑器中编辑 所以我有了创建隐藏页面的想法 但我不知道如何将此内容插入到模板中 是否需要select打字稿声明 另外 作为后续问题 我可
  • 使用 System.Diagnostics 进行简单调试和日志记录

    我希望能够将条目写入控制台应用程序 该应用程序将描述操作何时完成 可能会在某一时刻将它们写入 txt 文件 我希望它与同时运行的单独 GUI 应用程序一起使用 这样我就可以使用该应用程序并同时监视日志 我只假设诊断类是正确的工具 但是我以前
  • Parsley 自定义验证器不适用于 JavaScript 安装

    我有最简单的形式和最简单的自定义验证器 但它不起作用 请参阅http jsfiddle net M55M4 http jsfiddle net M55M4 怎么了
  • Joda Time 持续时间或间隔中的分钟数

    我有这个简单的代码 DateTime date new DateTime dateValue DateTime currentDate new DateTime System currentTimeMillis System out pri
  • 在Vim中,如何删除单词的后缀?

    在vim中 在正常模式下 如果光标位于单词中 而不是最后一个字母 de从光标位置删除单词的后缀 如果光标位于最后一个字母上 x也这样做 同时de会跳到下一个单词的末尾 您将使用什么命令在这两种情况下都有效 无论最后一个字母与否 目的是将命令
  • 如何设置带有选项卡的多个滑动视图的默认选项卡?

    我真的被困住了 我在主要活动中使用选项卡进行了四个滑动视图 但我想要的是当用户打开应用程序时 它会自动显示第二个选项卡而不是第一个选项卡 这是我的 MainActivity java public class MainActivity ex
  • Three.js 光线投射器可以与组相交吗?

    我想知道我的光线投射器是否正在查看我已加载的 OBJ 由于从 Cinema4D 导出的方式 我相信 OBJ 是一个具有 3 个子级的 THREE Group 而不是 THREE Object 我可以更改我的 raycaster 代码行来查找