Three.js Object3D.clone() 会创建几何体的深层副本吗?

2023-11-25

我正在使用 collada 加载器加载模型。加载器返回一个带有许多子网格的 Object3D“dae”。我想多次实例化父“dae”对象而不复制网格。我可以只使用 dae.clone() 吗?

换句话说:我想制作浅拷贝,它们都有自己的变换矩阵但共享相同的几何形状。做到这一点最有效的方法是什么?


默认情况下Object3D.clone()确实创建了一个深层副本。让我们看一下source

clone: function ( object, recursive ) {

    if ( object === undefined ) object = new THREE.Object3D();
    if ( recursive === undefined ) recursive = true;

    object.name = this.name;

    object.up.copy( this.up );

    object.position.copy( this.position );
    object.quaternion.copy( this.quaternion );
    object.scale.copy( this.scale );

    object.renderDepth = this.renderDepth;

    object.rotationAutoUpdate = this.rotationAutoUpdate;

    object.matrix.copy( this.matrix );
    object.matrixWorld.copy( this.matrixWorld );

    object.matrixAutoUpdate = this.matrixAutoUpdate;
    object.matrixWorldNeedsUpdate = this.matrixWorldNeedsUpdate;

    object.visible = this.visible;

    object.castShadow = this.castShadow;
    object.receiveShadow = this.receiveShadow;

    object.frustumCulled = this.frustumCulled;

    object.userData = JSON.parse( JSON.stringify( this.userData ) );

    if ( recursive === true ) {

        for ( var i = 0; i < this.children.length; i ++ ) {

            var child = this.children[ i ];
            object.add( child.clone() );

        }

    }

    return object;

}

正如我们所看到的clone函数接受两个可选参数:

  1. 要克隆的对象Object3D into.
  2. 指示是否递归克隆子项的标志。

所以是的,可以制作浅拷贝Object3D.children,但这不是您想要的(根据您的评论)。

我相信你实际上可以使用默认行为Object3D.clone()得到你想要的东西。Mesh.clone()不克隆Geometry and Material特性。

THREE.Mesh.prototype.clone = function ( object ) {

    if ( object === undefined ) object = new THREE.Mesh( this.geometry, this.material );

    THREE.Object3D.prototype.clone.call( this, object );

    return object;

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

Three.js Object3D.clone() 会创建几何体的深层副本吗? 的相关文章

  • 向该对象的每一面添加不同的颜色

    我为我的应用程序重新创建了一个包模型 并将其作为 obj 导出到 ThreeJs 中 我为模型几何中发现的每个面分配了不同的颜色 如下所示 var geometry new THREE Geometry fromBufferGeometry
  • 在 Three.js 中针对“子场景”进行光线投射

    因此 我正在使用 Three js 示例中的 webgl interactive cubes html 并且我有一个相对简单的问题 是否可以测试光线与对象的子对象的相交 例如 如果我做类似的事情 for var i 0 i lt 2000
  • 如何在 Three.js 上覆盖 HTML 文本/按钮?

    好的 很新three js在这里 但我正在努力实现谷歌所拥有的https beinternetawesome withgoogle com interland https beinternetawesome withgoogle com i
  • Three.js - 如何更新 arrowHelper?

    我正在尝试更新 arrowHelper 我尝试过操作箭头对象线中的顶点 设置所有内容dynamic true等等 但我似乎能做到的唯一方法就是删除旧线并绘制新线 有没有办法更新 arrowHelper 因此 您无法通过更改用于创建对象的值来
  • Three.js 支持波斯语/阿拉伯语文本

    我需要以波斯语 阿拉伯语显示一些文本 我加载了包含字符的字体 并使用 TextGeometry 在场景上创建文本 var loader new THREE FontLoader loader load B Zar Regular js fu
  • 将球体上的 3d 点转换为 UV 坐标

    我在球体上有一个 3d 点 想要将其转换为球体纹理上的 UV 点 有人可以指出正确的方向吗 我可以采用纯数学解决方案 Edit 我目前有这个 它不会返回正确的 UV 坐标 p 是球体上的 3d 点 mesh position 是球体的位置
  • Three.js 通过加载模型上的材质名称为材质添加边框

    是否可以在材料周围添加边框 如图所示 我可以通过以下代码设置材质颜色 object traverse function child if child instanceof THREE Mesh child material color se
  • 给定 3D 空间中的一条线,如何找到从它到一点的角度?

    我在 3D 空间中有两组点 我想画一条穿过两组点的中心的线 然后找到从该线到每个点的角度 从那里开始 我将根据两个角度的接近程度来确定两组中的匹配点 我知道如何找到每组点的中心 只需将它们平均在一起 并且我知道如何将它们匹配 甚至考虑到它们
  • 如何沿着简单的路径移动相机

    如何沿着简单的路径 由顶点 点数组创建 移动相机 我需要自动移动它 而不是像第一人称射击游戏那样通过键盘 鼠标事件来移动它 找了这个例子 http trijs org examples webgl geometry extrude spli
  • 扩展 Three.js 类

    我想扩展 Three js Object3D 类 但不知道该怎么做 有一个 Stackoverflow 问题 我已经阅读 重新阅读和尝试过 但无法让它为我工作 有没有办法扩展 ThreeJS 对象 https stackoverflow c
  • 重复凹凸贴图

    我正在尝试使用 Three js r55 将凹凸贴图应用到平面上 以创建一个模糊的感觉表面 这是我的代码 var mapHeight THREE ImageUtils loadTexture images felt png mapHeigh
  • 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
  • Three.js - 将 WebGL 和 CSS3D 与 iFrame 混合

    我准备了一个混合的工作页面WebGL and CSS3D 在SO的一点帮助下here https stackoverflow com questions 24681170 three js properly blending css3d a
  • 如何在 Three.js 场景中包含 OVRManager?

    我创建了几个 Three js Javascript 演示应用程序 正在我的新 Oculus Go 中进行试验 我正在尝试让 Go 控制器在我的应用程序中执行某些操作 根据 Oculus 开发人员中心的说法 最好的办法是将 OVRManag
  • Three.js canvas.toDataURL 有时为空

    我正在尝试使用 html2canvas js 渲染 THREE js 场景 一些覆盖的 HTML 元素 有用大多数时候 但并非一直如此 在失败的情况下 将渲染 HTML 元素 背景 覆盖层等 但不会渲染其他元素 THREE js 场景表现得
  • (A 框架)本地 gltf 不会加载;无法读取未定义的属性“切片”

    我从A型框架学校 https aframe io aframe school 11其中加载了 gltf 模型 然后我从 Khronos 加载了示例模型 this box https github com KhronosGroup glTF
  • 在 Three.js 中从 Web Worker 加载纹理

    当将大纹理图像应用到网格上一段明显的时间时 Three js 会锁定浏览器的主线程 让我们考虑以下示例 var texLoader new THREE TextureLoader texLoader load someLargeTextur
  • CSS3DObject 始终位于 WebGL Mesh 前面

    我正在混合CSS3D Renderer with WebGL Renderer to add HTML3D 空间中的元素WebGL场景 这CSS3DObject在前面WebGL网格即使WebGL Renderer具有较高的 z index
  • ThreeJS 动画光色

    我制作了一个定向灯 我想随着时间的推移改变颜色 我正在阅读文档 http threejs org docs index html Reference Math Color 但仍然没有启动并运行 在初始化之前我声明变量 var rmapped
  • Three.js点击单个粒子

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

随机推荐

  • powershell 无法识别 pipelinev

    我确定pipenv安装在以下路径中C Users Owner gt pip install pipenv 然后得到如下回复 Requirement already satisfied setuptools gt 36 2 1 in c us
  • R Shiny 自动开始下载

    我想在按下按钮时初始化 R Shiny 中文件的下载 并在生成文件之前进行一些检查 我用 downloadHandler 愚弄了周围 https shiny rstudio com gallery file download html 但我
  • Java:如何从 servlet 将文件上传到 WebDAV 服务器?

    我的 ajax 应用程序将文件从用户的浏览器上传到 Java 应用程序容器 我想做的是 上传完成后 我想将文件 发送 到 WebDAV 服务器 由主机名 即 localhost 端口 即 8080 和我想要的位置标识存储文件 即 dir1
  • 如何打开Neo4J Webadmin进行远程控制?

    我已经在我的服务器上的端口 7474 上安装了 Neo4J 实例 我的域也在使用该服务器 并且我希望使用如下用户名和密码远程使用 webadmin example com 7474 有没有办法做到这一点 我在 Neo4J 文档中找不到任何指
  • LINQ to SQL:如何更新唯一字段而不检索整个实体

    当我知道实体 ID 时 我想更新实体的唯一字段 在 LINQ to SQL 中是否可以不检索完整实体 使用 DataContext 中的所有字段 这是开销 是否可以创建实体并将其附加到 DataContext 并标记要在 DataConte
  • Mongoid 和 Rails 的字段别名

    MongoDB 中的常见做法是使用短键名来节省空间 例如 人们可能想使用 fn 而不是 first name 然而 在你的应用程序中 如果你到处使用 fn 你就完蛋了 太丑了 特别是对于 Rails 在 Mongoid 中声明字段时是否有一
  • 游戏点和框的数据结构

    什么是一个好的数据结构来表示游戏的状态点和框 我想出了使用 2 个布尔矩阵来表示水平线和垂直线 但也许有一种更优雅的方法来做到这一点 以及操作 add line 检查线 方格 使用一对二维布尔数组 称为linesX and linesY我感
  • 直接从 Perforce 命令行更改工作区 clobber 选项

    如何从命令行更改 perforce 规格 我想做的是 我有一个工作区 其 clobber 选项设置为noclobber 默认值 现在我想把它改成clobber 我知道我可以直接从p4v 但我不想要那样 我也知道如果我跑p4 client 它
  • 使用arm-linux-androideabi-gcc编译对象时出现问题

    背景 OSX 是操作系统 R8 NDK 我正在尝试使用 Android GCC 编译器编译以下类 include
  • 在 Pyramid 中,如何根据上下文内容使用不同的渲染器?

    我有 3 种不同的产品页面布局 我想根据有关产品的可用信息来显示它们 使用遍历我有一个名为ProductFinder获取所有信息 例如 用户转到domain green small 并ProductFinder将列出我的数据库中所有绿色和小
  • lua脚本错误检查

    是否可以在不执行lua脚本的情况下检查它是否包含错误 我有以下代码 if luaL loadbuffer L data size name fprintf stderr s lua tostring L 1 lua pop L 1 if l
  • 在 Kivy 中从内存加载图像

    我内存中有一张图片格式 从pyplot输出 我想通过Kivy直接在Android上显示它 但我不想创建图片文件 有什么办法可以做到这一点吗 在 pyplot 上 我可以通过编写对象来生成类似对象的文件 但我不知道如何将其放入 Kivy 中
  • 在策略定义中返回响应时如何使用变量?

    我正在 Azure API 管理的实例中配置入站策略 首先 我设置一个变量
  • 在哪里可以找到有关 XSLT 文件的优秀教程? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我正在编写两种 XML 文件类型之间的翻译 并且想知道在哪里可以找到有关此过程的一些好的教程 Thanks 教程 Update 我很高兴添加这个最新的 XSLT 教程 XSLT 2
  • jqGrid过滤记录

    似乎这里有一些关于这个主题的问题 他们有一些很好的答案 但我的情况似乎有点不同 我需要过滤 jqGrid 中显示的记录 但完全是在客户端 由于多种原因 填充网格的最佳方法是使用直接发送到页面上的 JavaScript 中的数组 网格本身根本
  • 我可以在客户端更改页面的 HTML 状态代码吗?

    我有一个静态 HTML 网页 我想将其状态代码设置为404 未找到 但是 我想使用 javascript 或 jQuery 而不是任何服务器端语言来完成此操作 我如何在客户端上执行此操作 使用 javascript 或者也许 tag 无法使
  • 使用 PDO 清理 MySQL 中输入的正确方法

    所以我有一个朋友尝试在我的网站上运行 SQL 注入 他成功地使用下面的代码进入了它 我怎样才能防止这种情况发生 我读过一些有关清理变量的内容 但我该如何做到这一点 INSERT INTO 登录 用户名 密码 VALUES Gjertsmel
  • 如何在Retrofit Android的请求正文中传递带有空值或空字符串的键

    即使没有值 我也需要传递密钥 因为密钥在服务器端是强制性的 但 Retrofit 在发送请求时删除了具有空值的键 如何使用 Retrofit 向服务器发送没有值的密钥 请求正文如下所示 first name testlogin last n
  • HttpSession 超时后重定向

    我一直在查看有关此主题的许多帖子 但无法找到适合我的情况的解决方案 我正在使用 Java EE 6 和 JSF 2 0 部署在 JBoss AS 7 1 上 In my web xml I have
  • Three.js Object3D.clone() 会创建几何体的深层副本吗?

    我正在使用 collada 加载器加载模型 加载器返回一个带有许多子网格的 Object3D dae 我想多次实例化父 dae 对象而不复制网格 我可以只使用 dae clone 吗 换句话说 我想制作浅拷贝 它们都有自己的变换矩阵但共享相