Three.js克隆.clone()和复制.copy()

栏目: 编程语言 · 发布时间: 6年前

内容简介:你查看Threejs的文档可以发现Threejs的很多类都具有克隆

Three.js克隆 .clone() 和复制 .copy()

你查看Threejs的文档可以发现Threejs的很多类都具有克隆 .clone() 和复制 .copy() 方法,比如网格模型 Mesh 、几何体 Geometry 、三维向量 Vector3 ...

个人WebGL/Three.js技术博客

.copy() 方法简单的说就是复制一个对象的属性值赋值给给另一个对象对应的属性。克隆方法 .clone() 是相当于新建一个对象,然后复制原对象的属性值赋值给新的对象对应属性,也就是说通过克隆方法 .clone() 创建一个和原来对象完全一样的对象。

如果你想了解一个threejs对象的克隆或复制方法,除了查看文档以外,最好的方式就是查看threejs官方包src目录下的源码。

几何体克隆 .clone()

下面的代码利用已有的立方体几何体对象执行克隆方法.clone()返回一个新的几何体对象,返回的的新的几何体对象包含原来的几何体顶点数据、顶点索引数居、UV坐标数据, 然后利用两个几何体分别创建一个网格模型。

var box=new THREE.BoxGeometry(10,10,10);
var box2 = box.clone();//克隆几何体
box.translate(20,0,0);//平移原几何体  新克隆的几何体不受影响
var material=new THREE.MeshLambertMaterial({color:0x0000ff});//材质对象—蓝色
var material2=new THREE.MeshLambertMaterial({color:0xff0000});//材质对象—红色
var mesh=new THREE.Mesh(box,material);
var mesh2=new THREE.Mesh(box2,material2);

几何体复制 .copy()

执行语句geometry2.copy(geometry1);,几何体geometry1的顶点相关数据会替换几何体geometry2的顶点相关数据。

var box=new THREE.BoxGeometry(10,10,10);//创建一个立方体几何对象
var sphere=new THREE.SphereGeometry(10,40,40);//创建一个球体几何对象
box.copy(sphere);//球体数据复制到box几何体,替换box原来的顶点数据
var material=new THREE.MeshLambertMaterial({color:0x0000ff});//材质对象—蓝色
var mesh=new THREE.Mesh(box,material);//网格模型对象
scene.add(mesh);//网格模型添加到场景中

三维向量克隆和复制

// 创建一个三维向量v1,xyz分量分别为1,3,6
var v1 = new THREE.Vector3(1,3,6)
// 克隆v1返回一个新的三维向量v2,v2的xyz分量和v1一样
var v2 = v1.clone()
// 创建一个三维向量v1,xyz分量分别为1,3,6
var v1 = new THREE.Vector3(1,3,6)
// 创建一个三维向量v2,xyz分量分别为5,7,8
var v2 = new THREE.Vector3(5,7,8)
// 通过复制方法可以复制v1的xyz分量的属性值赋值给v2的xyz三个分量
// 执行完复制后,v2的xyz分量值变为1,3,6
v2.copy(v1);

网格模型克隆 .clone()

网格模型执行 .clone() 方法克隆的时候,会新建一个网格模型对象 Mesh ,不过两个网格模型的几何体和材质对象是共享的。

// 网格模型Mesh的源码,查看源码你可以看到克隆网格模型的时候,几何体和材质是共享的
clone: function () {
  return new this.constructor( this.geometry, this.material ).copy( this );
}

网格模型mesh执行方法.clone()返回一个网格模型mesh2,平移网格模型mesh,网格模型mesh2并不受影响,如果在代码中插入语句box.scale(1.5,1.5,1.5);, 你会发现两个网格模型的尺寸都会变化,这很好理解,克隆网格模型的时候,几何体数据并没有克隆,两个网格模型共用一个几何体对象的顶点相关数据。

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平移
box.scale(1.5,1.5,1.5);//几何体缩放
scene.add(mesh);//网格模型添加到场景中
scene.add(mesh2);//网格模型添加到场景中
box.scale(1.5,1.5,1.5);//几何体缩放

以上所述就是小编给大家介绍的《Three.js克隆.clone()和复制.copy()》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Bulletproof Ajax中文版

Bulletproof Ajax中文版

Jeremy Keith / 刘申、宋薇 / 人民邮电出版社 / 2007-11 / 39.00元

本书介绍了如何构建无懈可击的Ajax Web应用程序,重点讲述如何在已有Web站点使用Ajax增强网站用户体验,从而尽可能地保证网站拥有最大限度的可移植性和亲和力,这正是目前大多数网站面临的需求。书中主要介绍了JavaScript、DOM、XMLHttpRequest、数据格式等,同时还提出了一种Hijax方法,即可以让Web应用程序平稳退化的方法。 本书适合各层次Web开发和设计人员阅读......一起来看看 《Bulletproof Ajax中文版》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具