如何使用 Three.js 执行拾取和隐藏对象?

2023-12-01

显示隐藏:

我一直在使用 Three.js Release 50,并且能够在以下工具的帮助下显示/隐藏对象(在我的应用程序中,它是一个网格子对象):

THREE.SceneUtils.traverseHierarchy(mesh,function(child){
    var z = document.getElementById("cameras").selectedIndex*5 -10;
    if (z === -10){
        child.visible = true;
    } else if (child.position.z !== z){
        child.visible = false;
    } else {

        child.visible = true;
    };
}); 

但是在使用release 54时,据说要使用object.traverse却发现很难一样。如何使用版本 54 替换上述代码?我在使用版本 54 时遇到的错误是:

enter image description here

Picking:

我发现了一个非常著名且复杂的 Three.js 拾取示例,它基于“Ray Picking”及其链接:Three.js 选取示例。基于这个例子,我一直在尝试在我的应用程序中实现拣选。但不知何故,这一行出现了错误。

var raycaster = new THREE.Raycaster( camera.position, vector.subSelf( camera.position                   
).normalize() );

我已经自定义管理锥体 [我的几何图形] 的父子关系JavaScript 对象[数据结构]以这种方式(第1层{对象内每层使用的数组}有100个锥体,并且都是父级,第2层有100个锥体,它们是第1层[多重性1:1]上的锥体的子级]和层3 的锥体是第 2 层锥体的子锥体,它们的关系也是 1:1,因此它们也是第 1 层锥体的孙子锥体)。

我使用网格从第一层添加祖级锥体,并通过该父级访问第 2 层中的子级,并将其添加到相同的网格,通过子级访问相同的孙级并添加到相同的网格。最后我将整个网格添加到场景中。由于“z 深度”变化 [对于第 1 层,z 坐标:5,第 2 层:0 和第 3 层:-5],第 1 层、第 2 层和第 3 层实际上由三层组成,如下图所示。

enter image description here

但是,在使用以下代码时,我看不到锥体上有任何损坏。

var vector = new THREE.Vector3( mouse.x, mouse.y, 1 );
            projector.unprojectVector( vector, camera );

            var raycaster = new THREE.Raycaster( camera.position, vector.subSelf( camera.position ).normalize() );

            var intersects = raycaster.intersectObjects( scene.children ); // tried with mesh.children as well, but no change :(

            if ( intersects.length > 0 ) {

                if ( INTERSECTED != intersects[ 0 ].object ) {

                    if ( INTERSECTED ) INTERSECTED.material.emissive.setHex( INTERSECTED.currentHex );

                    INTERSECTED = intersects[ 0 ].object;
                    INTERSECTED.currentHex = INTERSECTED.material.emissive.getHex();
                    INTERSECTED.material.emissive.setHex( 0xff0000 );

                }

            } else {

                if ( INTERSECTED ) INTERSECTED.material.emissive.setHex( INTERSECTED.currentHex );

                INTERSECTED = null;

            }

我希望我的特定锥体在光线相交时被拾取,同时基于特定锥体是否是祖父母/父母/孩子,特定家庭的剩余锥体也将被拾取。我的自定义数据结构有辅助函数,它通过输入祖父母(祖父母

我有一个 JSfiddle 链接,它使用 Three.js 版本 54 和 CombinedCamera.js 作为附加资源,请有人帮助我解决这个问题。我非常需要帮助。

这是我的 Jsfiddle 链接:http://jsfiddle.net/sagh0900/SQyLL/

我以前的版本working在实现 Picking 和使用 Three.js 版本 54 之前的 Jsfiddle。在此版本中,我使用了 Three.js 的版本 50,我可以成功地显示/隐藏对象:http://jsfiddle.net/sagh0900/PrVbg/3/

预先感谢您的帮助和支持:)


正如 WestLangley 提到的,每篇文章提出一个明确的问题将有助于我们更好地回答您。

对于使用 Raycaster 在 Three.js 中进行选择的不太复杂的示例,我在以下位置发布了一个示例:

http://stemkoski.github.com/Three.js/Mouse-Tooltip.html

它根据从鼠标位置发出的光线来更改场景中对象的属性(颜色)。也许可以修改此代码来解决您的部分困难。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Three.js 执行拾取和隐藏对象? 的相关文章

随机推荐

  • 如何通过解析 TTF 字体文件获取字形宽度?

    用于捕获 a 的字形宽度TrueType字体 我转换对应的TTF归档依据fontforge into AFM 它是文本格式 不是二进制 然后 解析文本文件以捕获字形宽度 应该有更简单的方法来直接解析二进制文件TTF文件来捕获字形宽度 我很欣
  • C# 索引属性?

    我使用 Visual Basic 已经有一段时间了 最 近决定开始学习 C 作为学习更复杂语言的一个步骤 作为这次跳跃的一部分 我决定将一些旧的 VB 项目手动转换为 C 我遇到的问题是转换一个具有使用带有参数 索引的属性的类的库 在 VB
  • 如何调试IE11 APPCACHE

    我有一个适用于 CHROME 和 SAFARI 的 HTML5 页面 但使用 Internet Explorer 11 不起作用 我的缓存清单根据http manifest validator com 我很沮丧 这是 AppCache 清单
  • 将 XHTML 转换为 Word ML

    将 Word HTML 转换为 Word XML 的最佳方法是什么 我无法购买工具 因此需要最好是 XSLT 它是免费的 并且适用于段落 列表 粗体和斜体等基本格式 斯蒂芬 布永写了一篇blog关于这一点 请参阅 MSDN 她提供了一个非常
  • Firebase Cloud 代码(后端逻辑)

    我正在考虑使用 Firebase 而不是 Parse 因为它即将关闭 来满足我未来的移动后端需求 我真的很喜欢它的实时数据库方面 但它没有像 Parse 与 Cloud Code 那样轻松集成后端逻辑 有没有简单的方法可以实现此功能 或者很
  • 无效的正则表达式错误

    我正在尝试检索该字符串的类别部分 property id 516 category featured properties 所以结果应该是 featured properties 我想出了一个正则表达式并在这个网站上进行了测试http gs
  • 将 Ado.net DataReader 转换为 IDataRecord 给出奇怪的结果

    我有一个针对数据库运行的查询 我可以看到有一条 2013 年 5 月 31 日的记录 当我使用 ADO NET 从 C 运行此查询 然后使用以下代码时 我丢失了 2013 年 5 月 31 日的记录 var timeSeriesList n
  • fileReader.readAsBinaryString 上传文件

    尝试使用 fileReader readAsBinaryString 通过 AJAX 将 PNG 文件上传到服务器 精简代码 fileObject 是包含我的文件信息的对象 var fileReader new FileReader fil
  • Google Sheets:具有动态变化的自定义函数

    我正在使用一个自定义功能跟踪什么为单元格着色是 但是这个函数有一个问题不更新自身如果细胞颜色改变 细胞颜色 function GetCellColorCode input var ss SpreadsheetApp getActiveSpr
  • 气流 Schedule_interval 和 start_date 使其始终触发下一个间隔

    如何配置气流 mwaa 以便它在部署 dag 时每天同一时间 太平洋标准时间上午 6 点 触发 我尝试过对我来说有意义的事情 将schedule interval设置为0 6 将开始日期设置为 now datetime utcnow now
  • javascript 中 isNaN 和 Number.isNaN 之间的混淆

    我对 NaN 的工作原理感到困惑 我已经执行了isNaN undefined 它回来了true 但如果我会使用Number isNaN undefined 它正在返回false 那么我应该使用哪一个 还有为什么结果有这么大的差异 引用一个p
  • 类型类 MonadPlus、Alternative 和 Monoid 之间的区别?

    标准库 Haskell 类型类MonadPlus Alternative and Monoid每个方法都提供了两种语义基本相同的方法 空值 mzero empty or mempty 操作员a gt a gt a将类型类中的值连接在一起 m
  • 如何在Python中从子类调用父类的方法?

    在 Python 中创建简单的对象层次结构时 我希望能够从派生类调用父类的方法 在 Perl 和 Java 中 有一个关键字 super 在 Perl 中 我可能会这样做 package Foo sub frotz return Bamf
  • Spring 会话范围 bean 与 AOP 的问题

    我想在 HomeController 类中注入 currentUser 实例 因此对于每个请求 HomeController 都会有 currentUser 对象 我的配置
  • 如何在 Spring MVC 中实现 HTTP 字节范围请求

    我的网站上出现视频倒带问题 我发现了 http 标头的问题 我当前返回视频的控制器方法 RequestMapping method RequestMethod GET value testVideo ResponseBody public
  • 更新 USB 设备列表

    我想要创建自动更新 USB 设备列表的模块 不仅仅是大容量存储 现在它的工作方式非常粗鲁 它有额外的线程 1 秒后更新设备列表 但也许您知道如何处理一些生成操作系统 例如 Windows XP 及更高版本 的插入事件或如何简化此过程的另一种
  • 将 einsum 计算转换为点积以在 Theano 中使用

    我最近才了解到np einsum并很快就上瘾了 但似乎theano没有等效的功能 所以我需要转换我的numpy以某种方式向 theano 编码 如何在 theano 中编写以下计算 IX np einsum ijk lj gt ilk p1
  • 如何在没有 WMI 的情况下知道两个分区是否在一个物理硬盘上?

    例如 我有这些分区 在 Windows 中 Hard Disk 1 Partition C Partition D Hard Disk 2 Partition E 有没有一种程序语言可以知道分区 C 和分区 D 是否在一个物理硬盘中没有 W
  • 如何在 Android 上欺骗我的活动的方向键

    我试图覆盖音量按钮以充当向上 向下箭头键 即它们应该将焦点移动到我的所有活动可聚焦视图上 为此 我超越了我的活动dispatchKeyEvent 方法注意我也尝试过onKeyDown 但我的音量键事件的某些部分仍然会通过系统 当您更改音量时
  • 如何使用 Three.js 执行拾取和隐藏对象?

    显示隐藏 我一直在使用 Three js Release 50 并且能够在以下工具的帮助下显示 隐藏对象 在我的应用程序中 它是一个网格子对象 THREE SceneUtils traverseHierarchy mesh function