Three.js - 合并多个几何体/网格,删除公共区域

2024-02-07

我正在尝试将两个几何图形/网格(红色和蓝色)合并为一个独特的几何图形/网格。但是在创建新的几何体并应用 Geometry.merge() 之后,我发现所有内部顶点和面仍然存在(绿色区域)。

我想删除所有这些额外的信息,因为它会在渲染的面上产生视觉故障,而且我无法正确计算合并的体积。我需要像最后一张图片那样的东西,一个仅包含最小外部/外部的网格面和顶点,删除内部的。

我尝试应用 ThreeCSG 来减去网格,但我发现它在尝试加载大模型时不断崩溃。我还尝试应用光线投射器来检测常见的面孔,但这对大型模型的性能也有很大影响。

ThreeCSG 是这里唯一好的选择吗?但由于我不能在每个模型上使用它,所以我应该放弃它。我想快速应用一些不太依赖于网格三角形数量的东西。


如果您与ThreeCSG和布尔运算,您应该尝试从一开始就将对象定义为 BSP 树或节点。它将提供更精确的结果,并且可以帮助您在不使浏览器崩溃的情况下使更大的几何图形正常工作。

I made 这里有一个小提琴 https://jsfiddle.net/wilt/dpw1y2Lt/5/在那里你可以明白我的意思。结果如下:

  • 在左侧,您可以看到我们在操作中使用的形状(仅用于可视化)。
  • 中间的布尔结果是通过减去THREE.PlaneGeometry从a转换为BSPTHREE.BoxGeometry已转换为 BSP。
  • 右侧的布尔结果是通过从本机 BSP 框对象中减去本机 BSP 平面而创建的。

正如您所看到的,中间结果多了 5 个顶点,这意味着也有更多的面(顶部、两侧和底部多了 1 个,对角平面上多了 2 个)。

如果您对此结果进行另一次布尔运算,您将获得更多的点和顶点。你的 BSP 树将会呈指数级增长......!


换句话说,你的 BSP 树会随着每次布尔运算而变大,使其变慢,并且最终也可能崩溃。
如果您想要执行大量布尔运算,请尝试制作原生 BSP 形状以获得更好的结果,而不是使用转换后的 Three.js 几何图形执行布尔运算。

所以而不是:

myBSP = new ThreeBSP( geometry );

do:

var polygons = [
    // define your polygons using new ThreeBSP.Polygon( vertices )
];

var node = new ThreeBSP.Node(polygons);

myBSP = new ThreeBSP(node);

然后进行布尔运算...

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

Three.js - 合并多个几何体/网格,删除公共区域 的相关文章

  • 在 javascript/jquery 中将光标更改为等待

    当调用函数时 如何让光标更改为此加载图标以及如何将其更改回 javascript jquery 中的普通光标 在你的 jQuery 中使用 body css cursor progress 然后又恢复正常 body css cursor d
  • 如何测试 javascript 闭包内的函数

    这似乎是不可能的 也可能是 但我正在尝试更多的 TDD 但我总是在闭包方面碰壁 假设我有以下内容 function createSomething init function privateMethod param return init
  • Android 设备上的 PhoneGap 蓝牙插件

    我一直在尝试让 PhoneGap 工作的蓝牙插件 但我似乎不知道哪里出了问题 首先 我的测试设备是 Galaxy S3 GT 19305T 应用程序是使用PhoneGap CLI http docs phonegap com en 3 0
  • 在 Vue.js 中从父组件执行子方法

    目前 我有一个 Vue js 组件 其中包含其他组件的列表 我知道使用 vue 的常见方式是将数据传递给孩子 并从孩子向父母发出事件 但是 在这种情况下 我想在子组件中的按钮出现时执行子组件中的方法 parent被点击 哪种方法最好 一种建
  • 使用 useReducers 调度函数发送多个操作?

    使用时是否可以通过调度函数发送多个动作useReducer挂钩反应 我尝试向它传递一组操作 但这会引发未处理的运行时异常 明确地说 通常会有一个初始状态对象和一个减速器 如下所示 const initialState message1 nu
  • 我想检查 $('#td1').text() === "x" 是否?

    我想检查innerHtml是否有X或O 所以我不能再次添加任何其他东西 但它不起作用 添加检查代码后它就停止了 我在这里尝试做一个简单的XO游戏来更熟悉javascript和jquery 我也不确定是否可以用 jQuery 做到这一点
  • 检查 JavaScript 字符串是否为 URL

    JavaScript 有没有办法检查字符串是否是 URL 正则表达式被排除在外 因为 URL 很可能是这样写的stackoverflow 也就是说它可能没有 com www or http 如果你想检查一个字符串是否是有效的 HTTP UR
  • 如何防止 Iframe 在与浏览器交互后弄乱浏览器的历史记录?

    因此 就我而言 我使用 Iframe 将 Grafana 附加到我的页面 这为我提供了漂亮且易于使用的图表 可以注意到 每次在图表上进行放大或缩小 使用鼠标单击 交互后 Grafana 的 Iframe 都会在我的 Angular 页面上触
  • 如何监听 jQuery AJAX 请求?

    以下两种实现 ajaxRequest 1 2 的方法应该是等效的 话说回来 为什么验证回调已执行的单元测试 3 在 1 中成功而在 2 中失败 我应该如何重写测试 3 来监视 2 中的成功回调 如果我尝试stub jQuery ajax使用
  • 音频 blob 的 URL.createObjectURL 在 Firefox 中给出 TypeError

    我正在尝试从创建的音频 blob 创建对象 URLgetUserMedia 该代码在 Chrome 中可以运行 但在 Firefox 中存在问题 错误 当我打电话时stopAudioRecorder 它停在audio player src
  • 使用 KnockoutJs 映射插件进行递归模板化

    我正在尝试使用以下方法在树上进行递归模板化ko映射 插入 http knockoutjs com documentation plugins mapping html 但我无法渲染它 除非我定义separate每个级别的模板 在以下情况下
  • 在javascript中解析json - 长数字被四舍五入

    我需要解析一个包含长数字的 json 在 java servlet 中生成 问题是长数字被四舍五入 当执行这段代码时 var s x 6855337641038665531 var obj JSON parse s alert obj x
  • 表单计算器脚本基本价格未加载 OnLoad

    我的表单中有一个计算器来计算我的下拉选项选择 function select calculate on change calc input type checkbox calculate on click calc function cal
  • Babel 7 Jest Core JS“TypeError:wks不是函数”

    将我的项目升级到 Babel 7 后 通过 Jest 运行测试会抛出以下错误 测试在 Babel 6 中运行没有任何问题 但在 Babel 7 中失败并出现以下错误 TypeError wks is not a function at Ob
  • 如何在类似控制台的环境中运行 JavaScript?

    我正在尝试遵循这里的示例 http eloquentjavascript net chapter2 html http eloquentjavascript net chapter2 html and print blah 在浏览器中运行时
  • 如何获取给定 DOM 元素的所有定义的 CSS 选择器?

    如何使用 jQuery 获取给定 DOM 元素的所有定义的 CSS 选择器 定义后 我的意思是在应用于任何样式表的所有 CSS 选择器document 在某种程度上 这类似于 FireBug 实现的功能 其中显示所选 DOM 元素的所有应用
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • 使用 Ajax 请求作为源数据的 Jquery 自动完成搜索

    我想做的事 我想使用 jquery 自动完成函数创建一个输入文本字段 该函数从跨域curl 请求获取源数据 结果应该与此示例完全相同 CSS 在这里并不重要 http abload de img jquerydblf5 png http a
  • 导致回发到与弹出窗口不同的页面

    我有一个主页和一个详细信息页面 详细信息页面是从主页调用的 JavaScript 弹出窗口 当单击详细信息页面上的 保存 按钮时 我希望主页 刷新 是否有一种方法可以调用主页的回发 同时还可以从详细信息页面维护保存回发 Edit 使用win
  • fullCalendar 未显示正确的结束日期

    我正在看调试页面 http jsbin com wukofacaxu edit js outputFullCalendar 官方网站的 我想安排一个活动时间为 22 09 2015 至 30 09 2015 dd mm yyyy 但它只显示

随机推荐

  • 输入流迭代器和异常

    几天前 我正在研究 istream 迭代器和异常处理 我对此感到好奇 include
  • SQL Server 表中列的最佳命名

    您会选择以下三个选项中的哪一个作为 SQL Server 表中的列名 为什么 年初至今工资 YTDWages YtdWages 跟进 SSN Ssn 社会安全号码 对于第一个 我会使用 WagesYTD 因为年初至今是工资的修正因素 对于第
  • 如果我的部署目标是8.0,我们是否需要为“armv7”和“arm64”编译iOS应用程序?

    我的应用程序支持iOS8 0及以上版本 而且我知道从iOS7开始它的arm64位架构 在这种情况下 我们是否需要编译 armv7 和 arm64 切片的二进制文件 如果我单独编译arm64 我可以减少我的应用程序大小 这是正确的方法吗 请帮
  • Oracle 从表中随机行

    我找到了从 Oracle 表中选择随机行的解决方案 实际上以随机方式对行进行排序 但您只能获取第一行以获得随机结果 SELECT FROM table ORDER BY dbms random value 我只是不明白它是如何工作的 ORD
  • 反应本机 RCTBridgeModule 的初始化

    我想知道向我的 RCTBridgeModule 添加初始化步骤的最佳方法是什么 我当前的解决方案是声明一个必须在 AppDelegate 内部调用的方法 是否有任何其他 更好的解决方案不需要模块的最终消费者向其 AppDelegate 添加
  • 埃拉托斯特尼素数筛法到一百万 C++

    所以我需要有关我的代码的帮助 由于某种原因 当我输入超过 500 000 的数字时 它不断崩溃 这是确切的分配 实现埃拉托色尼筛法并用它来查找所有素数 数量小于或等于一百万 使用结果 证明哥德巴赫猜想对于 4 到 4 之间的所有偶数 100
  • 基于单选按钮选择的 jQuery DatePicker 更新选项

    我试图让 jquery 日期选择器在选择不同的单选按钮时进行更新 div style padding bottom 50px div
  • 使用 WebDriver 处理不受信任的 SSL 证书

    我在使用 Java 中的 webdriver 处理不受信任的 SSL 证书时遇到了困难 我创建了 Firefox 配置文件 如下所示 FirefoxProfile profile new FirefoxProfile profile set
  • InstallShield - 相对文件路径

    如何将文件添加到 InstallShield 组件并指定 InstallShield 项目的相对路径 以便轻松在不同计算机上编译项目 使用免费的 VS 限量版 InstallShield 设置自定义路径看起来不太可能 因此 在只有几个预定义
  • Drupal:在网络表单中的提交按钮上方添加免责声明文本

    有没有一种简单的方法来修改 webform form tpl php 模板以在 Drupal Web 表单中的提交按钮上方显示免责声明文本 我可以在按钮下方添加文本 但不知道如何将按钮与其他元素分开以在它们之间添加文本 即 form ele
  • 使用 @Named 和未命名参数从 Javascript 客户端库进行调用是没有意义的

    我有一个Cloud Endpoints方法看起来像这样 HTTP POST ApiMethod name hylyts insert public Hylyt insertHylyt Named url String url Hylyt h
  • 将bind1st 用于通过引用获取参数的方法

    我有一个这样的结构 struct A void i int i void s string const s 现在当我尝试这个时 bind1st mem fun A i a 0 bind1st mem fun A s a 第一行编译正常 但第
  • 检查 SQL 中的日期是否重叠

    我有一个表 tblBranchTimingEntry BranchEntryID fromDate toDate SundayIn 24 2015 01 01 00 00 00 000 2015 01 31 00 00 00
  • Airflow k8s 运营商 xcom - 握手状态 403 禁止

    当我使用运行 docker 镜像时KubernetesPodOperator在气流版本 1 10 中 一旦 pod 成功完成任务 airflow 就会尝试通过 k8s 流客户端连接到 pod 来获取 xcom 值 以下是我遇到的错误 201
  • 如何设置 RStudio 服务器以在 AWS 上使用 SSL 运行?

    我有兴趣在 AWS 实例上运行 RStudio 服务器并通过 SSL 加密连接访问服务器 我该如何设置 启动一个使用 Ubuntu 作为操作系统的 AWS 实例 以及一个安全组 除了通过端口 22 的 SSH 连接之外 该安全组还具有端口
  • BLE获取广告包中编码的uuid

    我正在尝试获取 ble 设备的 UUID 我遵循 Android 开发人员指南 到目前为止我只能获取设备名称和 RSSI 我试图获取扫描方法中设备的 Uuid 如下所示 public void onLeScan final Bluetoot
  • 关于glTexImage3D

    对于 3D 纹理 对于三维纹理 z 索引指的是第三维 这究竟意味着什么 对于二维数组纹理 z 索引指的是切片索引 如果我们有 4 层 2D 纹理 那么如果 z 2 它将引用第二个 2D 纹理切片 那么 当我们有目标 GL TEXTURE 3
  • 实体框架 6 重用数据注释

    我已经寻找了一段时间的明确解决方案 但尚未得出结论 我想在数据模型类上仅指定一次数据注释 并让 UI 从视图模型类中看到这些注释 而无需再次指定它们 为了说明我的观点 假设我有一个 UserAccount 类 public class Us
  • iOS7风格的mapview标注segue在标注中(calloutAccessoryControlTapped,UIButtonTypeDetailDisclosure)

    我在 iPad 上有带有注释和标注的地图视图 每个标注还有 rightCalloutAccessoryView 和详细信息披露按钮 我看到库存地图应用程序对标注对象内的标注详细信息执行segue 它首先像推送转场一样执行视图从右到左的转换
  • Three.js - 合并多个几何体/网格,删除公共区域

    我正在尝试将两个几何图形 网格 红色和蓝色 合并为一个独特的几何图形 网格 但是在创建新的几何体并应用 Geometry merge 之后 我发现所有内部顶点和面仍然存在 绿色区域 我想删除所有这些额外的信息 因为它会在渲染的面上产生视觉故