Three.js Raycaster 不与自定义网格相交

2023-12-03

我通过创建带有顶点的几何图形,然后构建面来构建自定义网格(八角棱柱)。我现在尝试添加鼠标悬停交互,但是 Raycaster 没有返回该网格的交集。

我认为这是网格的问题,因为其他几何图形在场景中的相交处正确返回。

完整的例子可以在这里看到:http://jsfiddle.net/mattheath/3qxzS/

var x, y, z, width, height, opacity;


 // Container object
 var octagon = new THREE.Object3D();

 // Adjust registration point to bottom of object
 y = y + height / 2;

 // Default opacity to non-transparent
 opacity = opacity || 1;

 // Calculate distance from edge of a cube the octagonal side starts
 var cornerRadius = ((width - (width / (1 + Math.sqrt(2)))) / 2) * 0.85;

 // Boundaries
 var xMin = x - width / 2;
 var xMax = x + width / 2;
 var zMin = z - width / 2;
 var zMax = z + width / 2;
 var yMin = y;
 var yMax = y + height;

 // Calculate vertices

 var vertices = [];

 vertices.push( new THREE.Vector3(xMax - cornerRadius, yMin, zMin) );
 vertices.push( new THREE.Vector3(xMin + cornerRadius, yMin, zMin) );
 vertices.push( new THREE.Vector3(xMin, yMin, zMin + cornerRadius) );
 vertices.push( new THREE.Vector3(xMin, yMin, zMax - cornerRadius) );
 vertices.push( new THREE.Vector3(xMin + cornerRadius, yMin, zMax) );
 vertices.push( new THREE.Vector3(xMax - cornerRadius, yMin, zMax) );
 vertices.push( new THREE.Vector3(xMax, yMin, zMax - cornerRadius) );
 vertices.push( new THREE.Vector3(xMax, yMin, zMin + cornerRadius) );

 vertices.push( new THREE.Vector3(xMax - cornerRadius, yMax, zMin) );
 vertices.push( new THREE.Vector3(xMin + cornerRadius, yMax, zMin) );
 vertices.push( new THREE.Vector3(xMin, yMax, zMin + cornerRadius) );
 vertices.push( new THREE.Vector3(xMin, yMax, zMax - cornerRadius) );
 vertices.push( new THREE.Vector3(xMin + cornerRadius, yMax, zMax) );
 vertices.push( new THREE.Vector3(xMax - cornerRadius, yMax, zMax) );
 vertices.push( new THREE.Vector3(xMax, yMax, zMax - cornerRadius) );
 vertices.push( new THREE.Vector3(xMax, yMax, zMin + cornerRadius) );

 // Start building Geometry
 var geometry = new THREE.Geometry();

 // Push in all the vertices
 geometry.vertices.push(vertices[0]);
 geometry.vertices.push(vertices[1]);
 geometry.vertices.push(vertices[2]);
 geometry.vertices.push(vertices[3]);
 geometry.vertices.push(vertices[4]);
 geometry.vertices.push(vertices[5]);
 geometry.vertices.push(vertices[6]);
 geometry.vertices.push(vertices[7]);

 geometry.vertices.push(vertices[8]);
 geometry.vertices.push(vertices[9]);
 geometry.vertices.push(vertices[10]);
 geometry.vertices.push(vertices[11]);
 geometry.vertices.push(vertices[12]);
 geometry.vertices.push(vertices[13]);
 geometry.vertices.push(vertices[14]);
 geometry.vertices.push(vertices[15]);

 // Add faces, top and bottom need 3 polygons

 // Bottom face
 geometry.faces.push(new THREE.Face4(0, 1, 2, 3));
 geometry.faces.push(new THREE.Face4(0, 3, 4, 7));
 geometry.faces.push(new THREE.Face4(4, 5, 6, 7));

 // Top face
 geometry.faces.push(new THREE.Face4(8, 9, 10, 11));
 geometry.faces.push(new THREE.Face4(8, 11, 12, 15));
 geometry.faces.push(new THREE.Face4(12, 13, 14, 15));

 // And each side
 geometry.faces.push(new THREE.Face4(0, 1, 9, 8));
 geometry.faces.push(new THREE.Face4(1, 2, 10, 9));
 geometry.faces.push(new THREE.Face4(2, 3, 11, 10));
 geometry.faces.push(new THREE.Face4(3, 4, 12, 11));
 geometry.faces.push(new THREE.Face4(4, 5, 13, 12));
 geometry.faces.push(new THREE.Face4(5, 6, 14, 13));
 geometry.faces.push(new THREE.Face4(6, 7, 15, 14));
 geometry.faces.push(new THREE.Face4(7, 0, 8, 15));

 var octagonMaterial = new THREE.MeshBasicMaterial( { color: 0xE6E6E6, side: THREE.DoubleSide, opacity: opacity, transparent: true } );
 var mesh = new THREE.Mesh(geometry, octagonMaterial);
 mesh.name = "octagon";
 octagon.add( mesh );

// The mesh is then added to the scene

Raycaster.intersectObjects() 需要面法线。

对于自定义几何形状,您可以像这样计算它们:

geometry.computeFaceNormals();

三.js r.58

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

Three.js Raycaster 不与自定义网格相交 的相关文章

  • Three.js 的外观似乎被翻转了

    我这里有一个演示 测试场地 http www myuplay com game test html or Backup http direct myuplay com game test html 由于某种原因 即使鼠标矢量是正确的 我的对
  • 如何添加标签/标签以显示在多个对象的顶部,以便当用户单击对象时标签始终面向相机?

    本质上 我想说的是 我想创建一个出现在对象顶部 表面上的标签或标签 以便当用户单击对象时 即使对象旋转 标签也始终面向相机 我该如何去做呢 我被告知要使用正交相机 但我不确定如何 和 CSS 作为标签 请参阅上一篇文章 如何使我的文本标签始
  • 该浏览器无法识别 React Three Fiber 网格标签

    我正在关注 Youtube 上的 3d 作品集教程 但遇到了这个错误 在这里 我尝试渲染网格 但控制台显示警告 此元素在此浏览器中无法识别 浏览器正在渲染其余部分 但这部分代码没有被渲染 这是代码块 const Computers gt c
  • Three.js ShaderMaterial 灯光问题

    你好 这是我的代码的一部分 地球仪 function createGlobe var normalMap THREE ImageUtils loadTexture images earth normal 2048 jpg var surfa
  • 如何将 3D 模型从 Cinema4D 导出到 Three.js?

    如果我有一个网格建模4D影院 我怎样才能将其导出three js http github com mrdoob three js3D JS 引擎 另外 导出材料也很方便colors for 多边形选择 为此 我刚刚为 Cinema4D 编写
  • 使用 Three.js 在片段着色器中手动选择 mipmap 的 lod

    我正在使用 Three js 中的 glsl es 编写一个基于物理的着色器 为了添加镜面全局照明 我使用内部带有 mipmap 链的立方体贴图 dds 纹理 按照 CubeMapGen 的说明进行预先计算here http seblaga
  • 将球体上的 3d 点转换为 UV 坐标

    我在球体上有一个 3d 点 想要将其转换为球体纹理上的 UV 点 有人可以指出正确的方向吗 我可以采用纯数学解决方案 Edit 我目前有这个 它不会返回正确的 UV 坐标 p 是球体上的 3d 点 mesh position 是球体的位置
  • 从数组 THREE.js 创建纹理

    我正在研究地形生成器 但我不知道如何处理颜色 我希望能够生成一张占据整个 PlaneGeometry 的图像 我的问题是如何根据我的高度图创建一个覆盖整个 PlaneGeometry 没有环绕 的单个图像 我可以想到一种方法 但我不确定它是
  • Threejs + Vanilla JS 和 React-Three-Fiber + Create-React-App 之间的颜色差异

    这已经困扰我一段时间了 为什么 React Three Fiber 中的材质颜色看起来比 Threejs 中暗淡 两种实现中的对象及其属性是相同的 Threejs 版本相同 在新引导中实施 create react app 没有额外的依赖项
  • 深度图三.js

    Three js中有没有办法获取深度图 我感兴趣的是制作类似于 Kinect 为给定场景制作的东西 我遇到了一种不使用颜色和雾来模仿这一点的黑客方法 但这并不理想 因为它会使用两个不同的场景并且会因光照而变化 我认为执行此操作的另一种方法是
  • 如何在 Three.js 中将 geoJSON 绘制为网格而不是线条,并填充颜色?

    我正在使用 Three js 制作一个地球仪 并将添加一些数据层 所有图层都将从 geoJSON 创建 我已将其设置为使地球仪 第一个数据文件 包含国家 地区 显示为线条 这使用三GeoJSON https github com jdomi
  • FontLoader 和 TextGeometry 未在 Threejs 中正确导入

    我正在尝试在 BoxGeometry 侧面的前 右 左和顶部添加 3D 文本 我实现了这个代码如下 loadFont gt const loader new THREE FontLoader loader load https threej
  • 三.js Raycaster intersectObjects

    我正在尝试修改这个例子 https github com timoxley threejs blob master examples webgl morphtargets md2 control html来自 Three js 通过鼠标点击
  • Three.js:基于图像的光照(IBL)

    I m searching to add an IBL to my scene and objects But I can t find anything on the web There are some examples with an
  • 使用 ThreeJS 获取球体纹理上的点击位置

    目前 我有一个带有纹理的球体 它绕 y 轴旋转 我还有在 3D 空间中单击的位置 以及球体上的旋转位置 我认为 目标 获取纹理上的位置 例如 我想获取我点击的图像的哪个方块 参见示例球体和下图 在实践中 我不会使用此图像 但我觉得这将是一个
  • Three.js - 将 WebGL 和 CSS3D 与 iFrame 混合

    我准备了一个混合的工作页面WebGL and CSS3D 在SO的一点帮助下here https stackoverflow com questions 24681170 three js properly blending css3d a
  • THREE.JS,忽略父级的轮换

    我试图使子对象跟随父级位置并表现得像一个普通的子对象 但是我希望它保持其旋转不变 在不影响性能的情况下 最好的方法是什么 我的CPU预算很紧张 已经运行了2个工作线程并且有很多对象 是否有设置只允许孩子的位置受到影响 同样重要的是 当父级旋
  • 解决 Three.js / webGL 中的 gl_PointSize 限制

    我正在使用 Three js 创建交互式数据可视化 此可视化涉及渲染 68000 个节点 其中每个不同的节点具有不同的大小和颜色 最初我尝试通过渲染网格来实现此目的 但事实证明这非常昂贵 我当前的尝试是使用 Three js 粒子系统 每个
  • Three.js canvas.toDataURL 有时为空

    我正在尝试使用 html2canvas js 渲染 THREE js 场景 一些覆盖的 HTML 元素 有用大多数时候 但并非一直如此 在失败的情况下 将渲染 HTML 元素 背景 覆盖层等 但不会渲染其他元素 THREE js 场景表现得
  • 如何在react-三纤维中提取并播放动画

    嗯 我有 gltf 动画模型 我成功加载模型 但无法播放嵌入的动画 我想知道是否可以以任何方式解决它 顺便说一句 我正在反应中工作 先感谢您 在这里您可以找到型号https drive google com file d 1ZVyklaQu

随机推荐

  • 如何在鼠标悬停(悬停)时更改图像

    如何更改图像 使用设置 img 标签 这不是 div or div
  • Java 处理 if null then new 的不同方法

    好的 我有一个关于处理空值的问题 这个问题很大程度上取决于意见 因此我将询问优点和缺点 假设我有一个可以返回 null 或 JSONArray 的函数 我总是想要一个 JSONArray 因此如果函数的结果为 null 我希望它创建一个空的
  • 按位置查找未标记的模板选项/参数/参数

    简而言之 我想从可变参数模板参数中提取各种选项 但不仅通过标签 还通过这些参数的索引 这些参数没有known标签 我喜欢 boost 中的方法 例如heap or lockfree政策 但希望使其兼容STL容器 分配器参数 Preface
  • 如何使用 jQuery 选择文本

    如何通过 jQuery 选择部分文本并进行处理 例如 我有一个文本 div This is an example text here div 我用鼠标选择几个单词 不是整个 div 并想显示这些单词 部分 test in div div 如
  • 通过 EQ 过滤删除元素不会从 jQuery 对象中删除该元素

    我使用此代码来匹配元素列表 var previewItems preview find items children not heads 一切工作正常 但是当我尝试通过选择其中一个项目的 EQ 来删除它时 在它从 DOM 中删除后 它保留在
  • 如何将数组缓冲区转换为字符串

    我在 node js 上编写了一个简单的 TCP 服务器 用于将一些数据发送到 Chrome 应用程序 在 Chrome 应用程序中 当我获取数据时 我使用下面的函数将其转换为字符串 但出现异常 Uint16Array 的字节长度应该是 2
  • 生产服务器上的.net调试[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我和我的团队第一次致力于 net Web 应用程序项目 我们想知道在生产服务器上调试问题的最有效方法 目前 我们通过 ftp 将工作上传到客户的生产服务器 由于我们的背景是 LA
  • 使用 SafetyNet Attestation API 在 Android 中进行安全环境检查无法正常工作,因为它无法在成功或失败回调时获得回调

    对于我正在使用的 android 中的安全环境检查 https developer android com training safetynet attestation html SafetyNet getClient this attes
  • 如何在 Windows 10 上安装 OpenXML SDK 生产力工具 2.5

    我从以下位置下载了 OpenXML SDK Productivity Tool 2 5微软网站 然而 当我想安装它时 我被告知我需要先安装 NET Framework 4 如果没有它 安装将无法继续 我已经安装了 NET Framework
  • 创建后更改可观察的间隔/设置

    在 RxJS 中 创建后如何更改间隔设置 到目前为止我有这个 但它不起作用 var observable Rx Observable interval 500 map function data return Hello World dat
  • 如何使用基于声明的授权保护asp.net core 2.1中的静态文件夹

    我有一个使用 asp net core 2 1 的小项目 我希望保护充满静态资产的文件夹 我尝试实现的是基于这篇文章https odetocode com blogs scott archive 2015 10 06 authorizati
  • 解决为什么 PrintWindow 为空白的问题

    我正在尝试使用 PrintWindow 捕获非活动窗口的屏幕截图 它适用于计算器和捕获 Google Chrome 但对于其他一些应用程序 例如游戏 它可以节省白色区域 PrintWindow 失败的原因可能是什么以及如何验证它们 编辑 我
  • CSS 模块的服务器端渲染

    我将导入样式CSS模块并使其与服务器端渲染一起使用 我尝试了以下方法 但每种方法都有其自己的警告 最好的方法是什么require style scss 是否有副作用 使用css 模块 require hook 优势 易于配置 您只需在服务器
  • 如何使用 c++ 11 使函数在所需的周期执行

    我想使用c 11来实现类似windows API的功能SetTimer 就像 每2秒做某事 假设你想让这个函数每 2 秒执行一次 void foo cout lt lt Hello from foo lt lt endl 您可以提供一个简单
  • Django:如何将 STATIC_URL 设为空?

    是的 我希望它像 Flask 框架一样工作 在那里我可以设置如下参数 static folder os getcwd static static url path 以及其中的所有文件 static files blabla bla可以通过以
  • Entity Framework Code First 和 SQL Server 2012 序列

    我正在实施数据库审计跟踪 通过 Web API 项目中的控制器执行的 CRUD 操作将序列化旧的和新的 poco 并存储它们的值以供以后检索 历史 回滚等 当我让一切正常工作时 我不喜欢它在 POST 期间让我的控制器看起来如何 因为我最终
  • cordova.file.*(所有目录)为空

    我正在从事 Ionic 移动应用程序开发 我的要求是创建客户端记录器来跟踪应用程序中的问题 我使用了中提到的方法https github com pbakondy filelogger 我可以在 Android 和 iOS 中创建日志文件
  • 绘图框 p 值显着性注释

    我已经开始使用并喜欢绘制箱线图来表示我的数据 然而 我很难找到一种方法来对比这两个群体 使用Plotly时有没有办法引入数据之间的统计显着性比较 我想创建这样的图表 其中 对应于 p 值 0 05 我发现使用scipy stats ttes
  • 使用 c# mvc4 读取 rss feed

    这是我的第一篇文章 所以我遇到了这个问题 而且我对这种语言或 c 非常陌生 我有一个读取新闻 rss 的模型 然后使用相同的索引控制器 我必须将其传递给视图 这是我的模型 using System using System Collecti
  • Three.js Raycaster 不与自定义网格相交

    我通过创建带有顶点的几何图形 然后构建面来构建自定义网格 八角棱柱 我现在尝试添加鼠标悬停交互 但是 Raycaster 没有返回该网格的交集 我认为这是网格的问题 因为其他几何图形在场景中的相交处正确返回 完整的例子可以在这里看到 htt