更改 Three.js 对象的几何形状

2024-01-15

我正在尝试更改 Three.js 场景中某些对象的几何形状。我有一段几乎可以工作的代码,其中鼠标单击触发了更改,但遇到了以下问题:(渲染的)形状仅在第一次鼠标单击时更改,即使几何图形也发生了变化通过以下每次点击都成功修改。使用 Three.js 库的 v66 或 v68(如果相关)。

I read Three.js:完全改变对象的几何形状 https://stackoverflow.com/questions/19977074 and 更新网格内的几何图形不会执行任何操作 https://stackoverflow.com/questions/15384078但到目前为止还无法让我的代码工作。

我的代码的相关部分:

var count = 0, item, geometry;
var geoms = [new THREE.SphereGeometry(2), new THREE.BoxGeometry(3, 3, 3)];


function init() {

    geometry = geoms[count];
    item = new THREE.Mesh(geometry, material);
    scene.add(item);

}

// Mouse click listener.
function handleClick(event) {
    count = 1 - count;
    geometry = geoms[count];
    item.geometry = geometry;

    /* With that next line, on the first click, the sphere
     * becomes a cube (as intended), but further clicks don't
     * change the view anymore, even though item.geometry is
     * modified.
     */
    item.geometry.buffersNeedUpdate = true;

    /* If I try next line instead, I got the following error:
     * "TypeError: l.geometryGroupsList is undefined"
     * from three.js.
     */
    // item.geometry.verticesNeedUpdate = true;
}

Here http://jsfiddle.net/hzmj74gb/是一个(非)工作示例的jsfiddle。屏幕上有一个球体,点击一下它就会变成一个立方体。进一步点击应该在球体和立方体之间切换,但屏幕上没有任何变化。


我不知道为什么会发生这种情况。一旦使用了几何对象,就无法更新网格的几何形状。

.clone()在这种情况下有效。

item.geometry.dispose();
item.geometry = geometry.clone();

dispose()先前的几何对象以防止内存泄漏。

会有更好的解决方案。

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

更改 Three.js 对象的几何形状 的相关文章

  • 我如何在 AngularJS 中监听点击并按住的情况?

    我制作了一个时间计数器 您可以通过单击按钮来增加或减少时间 然而 我希望当我单击并按住按钮时 时间的价值会不断攀升 所以目前如果你看到我的Plunkr http plnkr co edit BxX9x5zYFMXVqt5JsN1F p pr
  • React-native:将场景绑定到导航栏

    我正在整理这个提问 回答应用程序 并遇到了这个障碍 我想从导航栏触发场景中的功能 与登录应用程序类似 我在导航栏中有一个用于提交答案的按钮 RightButton route navigator index navState if rout
  • 如何将udp发送到udp node.js服务器?

    我对此很陌生 所以我真的不知道我在做什么 但我已经设置了一个 node js udp 服务器 我想从客户端 来自网站 向它发送一个数据包 但我不知道如何在 javascript 中做到这一点 或者是否可能 我不是在研究如何从 Node js
  • 取消html5浏览器中的单图请求

    我正在动态加载 大 图像以绘制到 html5 画布中 如下所示 var t new Image t onload t src http myurl 但每隔一段时间就会想取消图片请求完全地 我想出的唯一方法是设置src to i e t sr
  • 网站 YouTube 嵌入视频不断播放

    我正在使用 youtube 提供的 iframe 在我的网站上嵌入视频 我还使用了一个 css 弹出窗口 这是我从这个页面学到的http www pat burt com web development how to do a css po
  • VBA / HTML / jQuery 选择自动完成 - 在列表中选择

    我正在尝试使用 Excel 中的 VBA 在网站的列表中选择一个值 这不是一个 正常列表 该网站使用 jQuery 选择自动完成 如下所示 example http davidwalsh name demo jquery chosen ph
  • 如何使用 JavaScript 中的值填充下拉列表?

    我在 Tridion CMS 扩展中的功能区工具栏按钮中添加了一个按钮 单击该按钮后 将显示一个弹出页面 其中包含两个下拉菜单 通过更改第一个下拉控件中的值 我应该填充第二个下拉控件的值 就我而言 我正在使用ASP drop down li
  • 使用 moment.js 检查输入日期是否为星期一

    好吧 我想检查日期是否是星期一 例如 var myDate new Date moment myDate DD MM YYYY dayIs monday 在我的国家 一周的第一天是星期一 所以 我真的想检查输入日期是否是一周的开始 我尝试使
  • 如何仅在 NextJS 站点构建期间使用 getInitialProps?

    当使用 NextJS 构建静态站点时 我想要getInitialProps方法仅在构建步骤期间触发 而不是在客户端上触发 在构建步骤中 NextJS 运行getInitialProps 方法 https nextjs org docs fe
  • 动画进度元素值

    我有一个progress元素 该元素如下所示 div class container div div div
  • Leaflet js虚构地图

    我是 Leaflet 的新手 我想了解如何创建完全交互式的虚构地图 我有一张图像想要转换为传单地图 该图像基本上像图表一样具有许多连接和点 我想首先将该图像转换为地图 能够将鼠标悬停在这些点上 突出显示它们并显示有关它们的信息 并且还可以在
  • 使用 CryptoJS 更改密钥 [重复]

    这个问题在这里已经有答案了 我正在使用 CryptoJS 来加密和解密文本 在这里 我只是获取消息并显示加密和解密消息 我使用DES算法进行加密和解密 这是我的 HTML 文件
  • Node.js - console.log 不显示数组中的项目,而是显示 [Object]

    我在注销对象内数组的内容时遇到问题 实际的物体看起来像这样 var stuff accepted item1 item2 rejected response Foo envelope from The sender to new item1
  • 在闪亮的数据表中为每个单元格显示工具提示或弹出窗口?

    有没有什么方法可以为 r闪亮数据表中的每个单元格获取工具提示 有很多方法可以获取悬停行或列 但我找不到一种方法来获取行和列索引并为每个单元格显示不同的悬停工具提示 任何人都可以修改以下代码吗 library shiny library DT
  • Javascript - 将值从下拉框传递到 Google Maps API

    我正在使用 Google 地图 API 为一家出租车公司创建报价表 目前 用户在 2 个文本框中输入出发点和接载点 API 会计算两点之间的距离以及行程费用 我正在尝试添加两个具有设定位置的下拉框 以便用户可以选择这些位置之一或使用文本框输
  • 是否有任何非轮询方式来检测 DOM 元素的大小或位置何时发生变化?

    很长一段时间以来 我一直在寻找一种方法来检测 DOM 元素的大小或位置何时发生变化 这可能是因为窗口调整了大小 或者因为向该元素添加了新的子元素 或者因为在该元素周围添加了新元素 或者因为 CSS 规则已更改 或者因为用户更改了浏览器的字体
  • 如何在 Angular 中从父组件访问子组件?

    I have mat paginator在子组件a中 如下所示 子组件 html
  • JavaScript 代码在不使用 ActiveX 的情况下截取网站屏幕截图

    我有一个用户与之交互的 JavaScript 应用程序 我需要保存当前界面的外观 裁剪出我需要的部分 或者通过指定div只拍摄我需要的部分 然后发送回服务器 显然任何外部服务都无法做到这一点 我需要一个 JavaScript 或Flash
  • 数据表日期范围过滤器

    如何添加日期范围过滤器 like From To 我开始进行常规搜索和分页等工作 但我不知道如何制作日期范围过滤器 我正在使用数据表 1 10 11 版本 My code var oTable function callFilesTable
  • 如何在打字稿文件中导入没有定义文件的js库

    随着我们的项目变得越来越大 我想从 JavaScript 切换到 TypeScript 以帮助进行代码管理 然而 我们使用许多库作为 amd 模块 我们不想将其转换为 TypeScript 我们仍然想将它们导入 TypeScript 文件

随机推荐

  • Google Sheets 脚本 – 输出单元格背景颜色的函数

    我想在 Google 脚本中编写自己的函数 可以在 Google Sheets 中使用它来获取单元格的背景颜色 我们将该函数称为 SETBACKGROUNDCOLOR 我希望能够将单元格引用 以 A1 表示法 作为参数传递 例如如果我调用
  • 如何使用node js杀死进程

    我正在运行使用 IE chrome 和 firefox 驱动程序的 BDD 测试 有时 当我的测试失败时 它不会杀死驱动程序 因此它会继续运行 我想用进程名称杀死所有进程 在Windows中是这样的 taskkill F IM chrome
  • clojure 从字符串名称解析函数

    在 clojure 1 2RC1 中 我希望根据其名称作为字符串获取一个函数并对其进行评估 函数定义 ns my ns defn mycar x first x 以下工作有效 ns resolve ns symbol mycar 3 4 i
  • 为什么 boost::filesystem 中止而不是抛出异常?

    我正在将一些代码从 VS2010 使用 boost 1 55 迁移到 VS 2015 使用 boost 1 60 我最终得到了 Microsoft Visual C Runtime Library 的报告abort has been cal
  • 如何将 FieldValue.serverTimestamp() 转换为 Kotlin/Java 日期类

    我想保存在 Firestore 中创建帖子的日期 但我不想使用系统时间 相反 为了准确性 我想使用服务器时间戳 所以我正在使用FieldValue serverTimestamp 获取服务器时间戳 但保存它的变量的数据类型是日期 那么我该如
  • 有没有办法自动更新symfony2中的AppKernel?

    也许类似于generate bundle命令 生成包后提示更新AppKernel 或Composer 使用您安装的依赖项更新自动加载 我想要获得与generate bundle类似的功能 但我不想创建新的bundle 而是想添加刚刚下载的b
  • Azure 功能应用程序未显示在 Azure 门户中

    Azure 函数已从终端成功部署 部署过程中不涉及 CI CD 我正在将 http 触发器与 python 一起使用 我确实看到了init py function json host json在应用程序文件中 但是 这些函数未在 Azure
  • 如何在 C# 中正确处理空白、空行或空行

    我有一些正在处理文本文件的 C 代码 但我似乎无法让它在空白或空 空白 行中正常工作 My code while file EndOfStream line file ReadLine bool isComment line 0 line
  • Python 3 中有“foreach”函数吗?

    当我遇到可以用javascript完成的情况时 我总是想是否有一个foreach功能的话会很方便 我所说的 foreach 是指下面描述的函数 def foreach fn iterable for x in iterable fn x 他
  • Node Sass 尚不支持您当前的环境:Windows 64 位且运行时不受支持 (88)

    我已经尝试安装gulp sass最新版本与npm i gulp sass save dev一开始我遇到了很多错误 但后来解决了 但每当我尝试运行 gulp 时 我都会收到此错误 Error Node Sass does not yet su
  • 如何解决“请求的 URL 被拒绝。请咨询您的管理员。”错误?

    我有一个 ASP 应用程序 单击特定链接时 会执行一些 VB 脚本并显示 ASP 页面 但我得到的屏幕显示 信息不可用 请求的 URL 被拒绝 请咨询您的管理员 您的支持 ID 是 XXXXXXXXXXXXXXXXXXXXXX IIS 和事
  • UPS 测试追踪号码(有这样的东西吗?)

    我终于让 UPS 跟踪 API 正常工作了 或者至少我认为我是这样的 它给我一个 无效的跟踪号码 响应 我现在的问题是我没有要跟踪的包裹 有谁知道有什么资源可以让我测试来自 UPS 的虚假订单 或者有什么可以给出回应的资源 谢谢 我正在使用
  • 使用 Excel VBA 创建包含具有特定值的行的 Outlook 电子邮件正文

    我使用了一个示例来创建代码 使用 按钮 在我的文件中为红色 从 Excel 使用 Outlook 发送电子邮件 该代码有效 有一个预选的行范围 B1 K20 可以手动修改 这要归功于应用程序 输入框功能 Sub MAIL Dim rng A
  • Jenkins 运行并行脚本

    我是詹金斯的新手 需要一些帮助 我有 4 个 shell 脚本 test1 sh test2 sh test3 sh 和 test4 sh 我希望 test2 sh 仅在 test1 sh 成功运行时运行 而 test4 sh 仅在 tes
  • 如何使用点符号(如方括号符号)中的变量

    我一直在 Javascript 中使用方括号表示法来创建和调用关联数组 在这个例子中 我理解方括号表示法允许您使用变量来调用数组中的某个对象 你会如何用点表示法来做这样的事情 var item item 1 pen var x 1 cons
  • 如何选择BigQuery表中最新的分区?

    我尝试从日期分区 BigQuery 表中的最新分区中选择数据 但查询仍然从整个表中读取数据 我已经尝试过 据我所知 BigQuery不支持QUALIFY SELECT col FROM table WHERE PARTITIONTIME S
  • 如何限制ListView中列表项的显示

    我从 url 获取 XML 数据并使用自定义列表适配器在ListView 我只需要显示 10 个项目ListView 我怎样才能做到这一点 请告诉我 Thanks 适配器中仅放入 10 件物品 或者覆盖getCount 并返回10
  • Camera.PictureCallback 拍照后停止预览

    使用具有 Android API 16 的设备拍照后 预览停止工作 但当我使用具有 Android API 22 的设备时 应用程序工作正常 我有这个拍照代码 private Camera PictureCallback mPicture
  • 连接sqlite中未知数量的值

    我正在使用 sqlite 3 15 1 我有一张桌子master包含大学的主时间表 看起来像 day sem sec hour sub id MON 5 B 4 10IS51 MON 5 B 4 10IS53 MON 5 B 5 10CS5
  • 更改 Three.js 对象的几何形状

    我正在尝试更改 Three js 场景中某些对象的几何形状 我有一段几乎可以工作的代码 其中鼠标单击触发了更改 但遇到了以下问题 渲染的 形状仅在第一次鼠标单击时更改 即使几何图形也发生了变化通过以下每次点击都成功修改 使用 Three j