Three.js教程:对象克隆、复制

news/2024/10/21 7:39:52/
推荐:将 NSDT场景编辑器 加入你的3D工具链
其他系列工具: NSDT简石数字孪生

对象克隆.clone()和复制.copy()

Threejs大多数对象都有克隆.clone()和复制.copy()两个方法,点模型Points、线模型Line、网格网格模型Mesh一样具有这两个方法。

复制方法.copy()

A.copy(B)表示B属性的值赋值给A对应属性。

var p1 = new THREE.Vector3(1.2,2.6,3.2);
var p2 = new THREE.Vector3(0.0,0.0,0.0);
p2.copy(p1)
// p2向量的xyz变为p1的xyz值
console.log(p2);

克隆方法.clone()

N = M.clone()表示返回一个和M相同的对象赋值给N。

var p1 = new THREE.Vector3(1.2,2.6,3.2);
var p2 = p1.clone();
// p2对象和p1对象xyz属性相同
console.log(p2);

网格模型复制和克隆

网格模型复制克隆和三维向量基本逻辑是相同,但是注意三维向量Vector3.x.y.z属性值是数字,也就是说是基本类型的数据,对于网格模型而言,网格模型对象的几何体属性mesh.geometry和材质属性mesh.material的属性值都是对象的索引值。

var box=new THREE.BoxGeometry(10,10,10);//创建一个立方体几何对象
var material=new THREE.MeshLambertMaterial({color:0x0000ff});//材质对象var mesh=new THREE.Mesh(box,material);//网格模型对象
var mesh2 = mesh.clone();//克隆网格模型
mesh.translateX(20);//网格模型mesh平移scene.add(mesh,mesh2);//网格模型添加到场景中

缩放几何体box,你可以发现上面代码中的两个网格模型的大小都发生了变化,因为网格模型克隆的时候,mesh对象的几何体对象mesh.geometry属性值是box对象的索引值,返回的新对象mesh2几何体属性mesh.geometry的值同样是box对象的索引值。

box.scale(1.5,1.5,1.5);//几何体缩放

注意

通过本节课的学习,对Threejs不同对象的克隆.clone()和复制.copy()方法有一个大致印象即可。

实际开发的时候,注意不同对象的复制或克隆方法可能稍有区别,使用的时候最好通过代码测试,或者直接查看threejs源码某个类对.clone().copy()封装,这样更为直观清楚。

几何体复制和克隆

几何体克隆或复制和网格模型在属性值深拷贝、浅拷贝方面有些不同,比如几何体的顶点属性Geometry.verticesGeometry.vertices的属性值是一个数组对象,但是复制或克隆的时候,不是获得对象的索引值,而是深拷贝属性的值,可以在threejs源码Geometry.js全文检索copy: function关键词,找到该类对copy方法的封装细节。

3D建模学习工作室

上一篇:Three.js教程:模型对象旋转平移缩放变换 (mvrlink.com)

下一篇:Three.js教程:常见光源类型 (mvrlink.com)

 


http://www.ppmy.cn/news/106481.html

相关文章

React Native的fragment和JetPack ViewPager2的集成

文章目录 背景原生ViewPage2的代码结构React Native端的实现原生端的实现在Adapter中注册FragmentMainActivity实现DefaultHardwareBackBtnHandler接口 小结 背景 ViewPager2是ViewPager的升级版,在原生Android应用中使用广泛。近期本人项目需要添加一些React Nati…

详解iPaaS与RPA的区别及各自的应用场景

随着企业数字化转型的加速,业务系统集成和自动化流程成为关键议题。本文旨在探讨iPaaS(Integration Platform as a Service)与RPA(Robotic Process Automation)在业务系统集成方面的区别,它们各自的用途和适…

【C++初阶】:string类

string 一string的基本用法二.迭代器1.基本使用2.语法糖3.反向迭代器4.const迭代器 三.容量四.插入和删除五.一个例题:解析协议六.读取空格七.一些其他函数 一string的基本用法 文档里 一般使用 二.迭代器 1.基本使用 string里重载了一种非常厉害的运算符[ ] 这个运…

MySQL CAST 函数与 CONVERT 函数

文章目录 CAST 函数与 CONVERT 函数1. 数字和小数点组成的字符串转换为整型2. 非数值字符串转换为整型3. 把整型转换为二进制4. 数字和小数点组成的字符串转换为浮点型 CAST 函数与 CONVERT 函数 前面我们介绍的两个函数用于字符串和日期类型之间进行相互转换,有时我…

搭建后台管理系统模板(v3+ts+vite)

目录 项目初始化 环境准备 初始化项目 项目配置 一、eslint配置 .eslint.cjs配置文件 vue3环境代码校验插件 安装指令 修改.eslintrc.cjs配置文件 .eslintignore忽略文件 1.4运行脚本 二、配置prettier 2.1安装依赖包 2.2.prettierrc.json添加规则 2.3.prett…

(一)浅谈微服务概念理解

1.什么是微服务 让我们以一个餐厅为例来解释微服务的概念。 想象一家传统的餐厅,它有一个集中式的厨房,所有的菜品都在同一个厨房中准备和烹饪。这个厨房负责接收顾客的点餐请求,准备食材,烹饪菜品,并最终将菜品交给…

【面试集锦 - 汽车电子 - 功能安全】

功能安全 在汽车电子行业中,功能安全是指确保车辆电子系统在发生故障时能够继续执行其所需的安全功能的能力。由于现代汽车中的电子系统在安全性、可靠性和性能方面起着关键作用,因此功能安全成为了汽车电子行业中的重要概念。 功能安全的目标是防止或…

浏览器兼容性:JavaScript polyfill

由于 JavaScript API 有自己的规范,因此并非所有浏览器都同时支持特定规范。因此,我们必须提供 API 的补丁版本,以确保它仍然可以在不原生支持它的浏览器上运行。这种补丁称为 polyfill。 比如为 Safari 15.4 之前提供 Array 的at()方法的补…