三.js raycaster 交集

2024-01-15

我编写了下面的代码来获取与 3d 形状的交点。它工作得很好,但如果有两个与形状的交点,它只返回最远的交点,而我需要与形状最近的交点。我怎样才能到达最近的十字路口?

  /*here I create a cube*/

            var geometry0 = new THREE.Geometry()
            geometry0.vertices = [new THREE.Vector3(0.5, -0.5, 0.5), new THREE.Vector3(-0.5, -0.5, 0.5), new THREE.Vector3(-0.5, -0.5, -0.5), new THREE.Vector3(0.5, -0.5, -0.5), new THREE.Vector3(0.5, 0.5, 0.5), new THREE.Vector3(-0.5, 0.5, 0.5), new THREE.Vector3(-0.5, 0.5, -0.5), new THREE.Vector3(0.5, 0.5, -0.5)];
            geometry0.faces = [new THREE.Face3(3, 2, 1), new THREE.Face3(3, 1, 0), new THREE.Face3(4, 5, 6), new THREE.Face3(4, 6, 7), new THREE.Face3(0, 1, 5), new THREE.Face3(0, 5, 4), new THREE.Face3(1, 2, 6), new THREE.Face3(1, 6, 5), new THREE.Face3(2, 3, 7), new THREE.Face3(2, 7, 6), new THREE.Face3(3, 0, 4), new THREE.Face3(3, 4, 7)];
            geometry0.computeFaceNormals();
            geometry0.computeVertexNormals();
            var material0 = new THREE.MeshBasicMaterial({color: 0x39d2dbe7fff39d2, transparent: true, opacity: 0});
            mesh0 = new THREE.Mesh(geometry0, material0);
            egh0 = new THREE.EdgesHelper(mesh0, 0x000);
            egh0.material.linewidth = 2;
            scene.add(egh0);


            objects.push(mesh0);
            projector = new THREE.Projector();
            console.log(objects);
            mouse2D = new THREE.Vector3(0, 10000, 0.5);//controllare i valori



    /* here I create the ray */


document.addEventListener('click', onDocumentMouseClick, false);


        function onDocumentMouseClick(event) {

            event.preventDefault();

            mouse2D.x = (event.clientX / window.innerWidth) * 2 - 1;
            mouse2D.y = -(event.clientY / window.innerHeight) * 2 + 1;
             var vector = new THREE.Vector3( mouse2D.x, mouse2D.y, 0.5 );

            projector.unprojectVector( vector, camera );

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


            var intersects = raycaster.intersectObjects( objects );

            if (intersects.length > 0) {
                console.log("ok");} 

如果我检查 intersects[0].point 我只能看到立方体相交的最远点面而不是第一个面(例如,如果您看着前面的立方体并制作一条射线,则该射线在与第一个面相交之前并与第一个面后面的第二个面相交。) 此代码的目标是仅在单击顶点时创建事件。 所以在此之后我编写了代码来计算点击点和所有顶点的欧几里德距离 并返回距离单击点最近的顶点。 如果您有其他想法仅在单击顶点时触发事件,我们欢迎。


是的,基本思想是ray casting就是我们投影一条垂直于平面的射线,我们找出该射线相交的对象列表。

因此,要访问第一个元素,您所要做的就是添加以下代码。

var intersects = raycaster.intersectObjects(objects);

if (intersects.length > 0) {
       var firstIntersectedObject  = intersects[0];
       // this will give you the first intersected Object if there are multiple.
    }

Here is 我的另一篇帖子 https://stackoverflow.com/questions/24690731/three-js-3d-models-as-hyperlink/24692057#24692057我在其中以更详细的方式解释了一些内容,您可以参考它以更好地理解光线投射的功能。

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

三.js raycaster 交集 的相关文章

  • 如何打开新选项卡并更改当前页面

  • AJAX 安全问题

    我希望能够解决一些关于 AJAX 安全性的问题 这是我试图理解的一个场景 假设我正在使用 AJAX 向页面请求一些半敏感材料 例如 我将把用户的 ID 传递给一个 php 文件 并返回一些关于他们自己的信息 现在 是什么阻止人们模拟此 Ja
  • 有没有办法动态更改 jqGrid 的单元格值?

    这个问题可能已经被问过很多次了 但我想知道是否可以动态更改 jqgrid 的单元格值 我基本上有一个网格 它通过 JSON 字符串加载数据 在特定列的某些行上 该值可能为 null 因此 预先知道哪个行 ID 是一个问题 然后能够将 nul
  • JAVASCRIPT - 为什么这个对象没有改变?

    function myFunc theObject theObject make Ford model Focus year 2006 var mycar make Honda model Accord year 1998 var x my
  • 在上传之前预览图像 VUEjs [重复]

    这个问题在这里已经有答案了 我知道这个问题已经被问过 但我不知道如何在vuejs中使用代码 我尝试了很多但没有任何结果 我还添加了我的代码 有人可以帮帮我吗 这是我的代码 谢谢 html
  • 从选择 onChange 调用 javascript 函数 [重复]

    这个问题在这里已经有答案了 所以我有一个简单的 HTML 选择框和一个 javascript 警报功能 我希望选择框有一个 onchange 事件来调用 javascript 警报函数 这是我到目前为止所拥有的 HTML div Type
  • 判断字符串是否包含有效的javascript代码

    我正在寻找一个C 返回的函数true如果字符串包含有效的 JavaScript 语法 例如 IsValidJavascript alert hello 会回来true but IsValidJavascript alertXXhelloZ
  • 使用 jQuery inputmask 插件范围 0-100

    如何创建 0 到 100 范围内的掩码 document ready function masked inputmask 您可以使用jquery inputmask regex extensions js为了那个原因 你可以找到带有所有扩展
  • Apache Thrift Java-Javascript 通信

    我正在编写一个基于 Apache Thrift 的 Java 服务器 它将从 Javascript 客户端接收数据 我已经完成了 Java 服务器 但问题是我可以获得 Javascript 客户端的工作示例 我无法找到一个好的示例 构建文档
  • 如何将一个数组中的所有项目复制到另一个数组中?

    如何将数组的每个元素 其中元素是对象 复制到另一个数组中 以便它们完全独立 我不想更改一个数组中的元素来影响另一个数组 这里的关键是 数组中的条目是对象 并且 您不希望对一个数组中的对象的修改显示在另一个数组中 这意味着我们不仅需要将对象复
  • EmberJS:对象作为查询参数来刷新模型

    我遵循了查询参数指南 http guides emberjs com v1 11 0 routing query params http guides emberjs com v1 11 0 routing query params 而且效
  • 使用javascript以编程方式触发iOS safari中的复制菜单?

    我正在尝试实现一种用户友好的方式 将一些文本从文本输入字段复制到 iOS Safari 上的剪贴板 我知道无法在这个平台上以编程方式完成此操作 但我希望能够尽可能地指导用户体验 在 iOS Safari 上 当用户手动突出显示某些文本时 会
  • Chrome --app 相当于 Firefox\IE

    我有一个网络应用程序 客户要求单击不同按钮时更改浏览器窗口大小 我发现在那link https stackoverflow com questions 13436855 launch google chrome from the comma
  • 如何知道 .keyup() 是否是字符键(jQuery)

    如何知道 keyup 是否是字符键 jQuery input keyup function if key is a character such as a b A b c 5 3 2 etc not enter key or shift o
  • 了解 Document.createElement()

    我在用着GWT及其底层DOM能力 我基本上想要实现的是 Have a div包含一些文本的元素 其中一些文本将被包围span元素 span 元素可相互拖动并提供上下文菜单 New span元素可以由最终用户动态创建 它可能是这样的 在应用程
  • 如何将MathJax公式转换为img

    Mathjax 现在在我的项目中运行良好 但有一个问题 有没有办法将MathJax的公式 纯html和css 转换成img文件 我可以保存 MathJax 可以配置为生成 SVG 看http docs mathjax org en late
  • javascript - 如何获取对象名称或关联数组索引名称?

    我有一个像这样的 JSON 对象 var list name1 element1 value1 name2 element1 value2 如何提取所有 nameX 字符串值 例如 假设我想将它们连接在一个字符串中输出 例如 name1 n
  • Three.js点击单个粒子

    In this example http jsfiddle net agqq96bq 2 您可以看到 2 个可点击的粒子 但它们都受到点击的影响 另外 我只想检测粒子上的点击 而不将它们过滤出场景 像这儿 if intersects len
  • Vue - 调度完成后调用 store getter?

    我正在使用 Laravel 5 7 Vue2 Vuex 我在调度调用完成后让 Vue 返回存储值时遇到一些困难 我的申请流程如下 我单击一个提交按钮 该按钮调用组件上的 validate Validate 分派到我的 addLease 操作
  • 如果 POST 响应仅包含 ID,如何将数据保存到我的 Ember 存储?

    Ember 数据期望我的服务器在每次成功后返回完整的对象POST 但是 我的 API 只返回一种元对象 其中包含id 当 Ember 收到此对象时 记录中的现有数据将被删除 除了id 例如 当我这样做时 var asset App Asse

随机推荐

  • 如何在 Meteor JS 中将数组值加载到模板变量?

    如何将数组值加载到 Meteor 中的模板变量 请查看下面的代码并建议我该怎么做 HTML 代码
  • 我应该将不带参数的 Perl 子例程称为 Marine() 或 Marine 吗?

    根据下面的示例代码 有两种调用子例程的方式 subname and subname C Perl bin perl exe use strict use warnings use 5 010 marine style 1 marine st
  • delphi 有没有办法通过名称实例化一个类?

    我想实例化一个类 但我只有字符串中的名称 有办法吗 这是来自 Delphi 帮助 Delphi 2006 但至少可以从 Delphi 7 获得 Syntax函数 GetClass const AClassName string TPersi
  • 正确地将 blazor 项目发布/部署到 github 页面

    首先我要说的是 我在这里的工作肯定比我的工资水平稍高一些 我将尽力描述这个问题并使其最容易回答 我在 Visual Studio 中创建了一个 Blazor 项目 并将其连接到 GitHub 存储库here https github com
  • 创建新的android项目时,出现错误“必须指定活动名称”

    当我尝试在如下所示的步骤中创建新的 Android 应用程序项目时 出现错误 必须指定活动名称 当我尝试创建新活动时也会发生同样的情况 我对分层父类有点困惑 它有什么用呢 为什么 Eclipse 不允许我在没有指定的情况下创建活动 这应该是
  • Visual Studio 的 Python 工具上的 Pytest

    可以在 Visual Studio 2010 上调试使用 pytest 库的 python 测试吗 我在解释器参数上添加了 m pytest 但未命中断点 我只能运行测试脚本而不对其进行调试 Pytest 建议创建一个独立的启动脚本 if
  • 将 Rust 应用程序与不在运行时链接器搜索路径中的动态库链接

    我有一个共享库 我想将其动态链接到几个单独的二进制 Cargo 应用程序 我使用以下命令将其位置包含在链接器中 L path to dir格式并且应用程序可以正确编译 并且我期望二进制大小显着减小 但是 当使用检查生成的二进制文件时ldd
  • 查找两个列表相同的从 1 开始的位置

    挑战在于编写一个函数来比较两个相当小的整数列表 每个列表大多少于 10 个元素 一个列表可能类似于 self 0 0 1 2 要与之比较的列表可能类似于以下示例之一 other1 other2 0 0 1 other3 0 0 1 2 0
  • 将输出写入打开 exe 的目录

    我有一个表格exe 现在单击按钮我希望它将文件保存到打开它的位置 例如如果我给这个exe给您 您将其复制到 C 盘文件夹名称 la la 然后将文件保存到 C 盘文件夹名称 la la 目前我正在尝试这个可行的方法 但我不希望它再提供目录路
  • 错误“框架不在模块中。”在 Xamarin.Forms - Android 项目中

    每当涉及到这一行时 就会出现以下错误 using var client new HttpClient var json await client GetStringAsync http mvalivros azurewebsites net
  • 使用 Docker 和 PHP 从 env 文件加载环境变量

    如何使用 Docker 文件中设置的 dotenv 变量传递给 Php 应用程序 最近尝试使用带有一组键配对值的 env 文件来跨不同的配置文件使用 但注意到 Docker Wordpress 映像并不容易设置 虽然在节点等中设置起来相当简
  • 如何判断PDF是横向还是纵向

    有没有工具可以确定 PDF 是横向还是纵向 我目前看过pdfbox and Itext为此 但似乎我找不到它 请告知他们是否支持这一点 使用提取 PDF 页面信息Origami提供的信息是 pdf 页面有一定程度的旋转 以下是 Origam
  • 在项目模板中包含对我自己的程序集的引用的最佳方法是什么?

    我们已经用 C 开发了一个库 现在我希望创建一个项目模板来帮助正确使用该库 我希望新项目包含对库程序集的引用 但不希望将程序集部署到 GAC 或者依赖于驻留在某个特定位置的程序集 我的想法是将 dll 包含在项目模板 zip 文件中 这意味
  • NVelocity 找不到模板

    我在 ASP NET MVC 应用程序中使用 NVelocity 时遇到一些困难 我用它作为生成电子邮件的一种方式 据我所知 我传递的详细信息都是正确的 但它无法加载模板 这是代码 private const string defaultT
  • 如何在 Electron 框架中使用登录事件?

    我需要一些帮助来理解如何Event login Electron 框架中的功能有效 它是浏览器中常见的密码自动填充 记住密码功能的低级实现吗 我想用它来自动填充网页登录流程中的密码 例如 const electron require ele
  • 如何使用 Selenium2Library 在机器人级别向 chromedriver 添加扩展

    我想在我的机器人套件设置中实例化 chromedriver 实例 但我需要在浏览器启动时安装扩展 通过简单地将 chromeoptions 添加到我的 webdriver 实例中 我可以轻松地在 Python 级别执行此操作 但我需要在机器
  • 在 c 中将数组转换为结构体,反之亦然

    令其为以下结构 typedef struct int x int y st 我可以将 int 数组 转换 为 struct st st z int t 2 t 0 0 t 1 1 z st t printf d d n z x z y 那么
  • 条纹 RedirectResolution 重定向到 https url

    假设用户使用 https 访问 stripes action1 一旦action1处理完成 它使用RedirectResolution重定向到action2 此时 浏览器会收到一个 302 to action2 其中包含 http 而不是
  • ASP.NET core 3.1:ConfigureAppConfiguration 是否与 launchSettings.json 交互?

    使用 kestrel 从 Visual Studio 2019 启动 ASP NET core 3 1 Web 应用程序时 我遇到了奇怪的行为 我的意思是启动配置文件not使用 IIS Express 我创建了一个最小的应用程序来重现该问题
  • 三.js raycaster 交集

    我编写了下面的代码来获取与 3d 形状的交点 它工作得很好 但如果有两个与形状的交点 它只返回最远的交点 而我需要与形状最近的交点 我怎样才能到达最近的十字路口 here I create a cube var geometry0 new