Three.js教程:對象克隆、復(fù)制
推薦:將NSDT場景編輯器加入你的3D工具鏈
其他系列工具:NSDT簡石數(shù)字孿生對象克隆.clone()和復(fù)制.copy()
Threejs大多數(shù)對象都有克隆.clone()和復(fù)制.copy()兩個(gè)方法,點(diǎn)模型Points、線模型Line、網(wǎng)格網(wǎng)格模型Mesh一樣具有這兩個(gè)方法。
復(fù)制方法.copy()A.copy(B)表示B屬性的值賦值給A對應(yīng)屬性。
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變?yōu)閜1的xyz值 console.log(p2);克隆方法.clone()
N = M.clone()表示返回一個(gè)和M相同的對象賦值給N。
var p1 = new THREE.Vector3(1.2,2.6,3.2); var p2 = p1.clone(); // p2對象和p1對象xyz屬性相同 console.log(p2);網(wǎng)格模型復(fù)制和克隆
網(wǎng)格模型復(fù)制克隆和三維向量基本邏輯是相同,但是注意三維向量Vector3的.x、.y、.z屬性值是數(shù)字,也就是說是基本類型的數(shù)據(jù),對于網(wǎng)格模型而言,網(wǎng)格模型對象的幾何體屬性mesh.geometry和材質(zhì)屬性mesh.material的屬性值都是對象的索引值。
var box=new THREE.BoxGeometry(10,10,10);//創(chuàng)建一個(gè)立方體幾何對象 var material=new THREE.MeshLambertMaterial({color:0x0000ff});//材質(zhì)對象 var mesh=new THREE.Mesh(box,material);//網(wǎng)格模型對象 var mesh2 = mesh.clone();//克隆網(wǎng)格模型 mesh.translateX(20);//網(wǎng)格模型mesh平移 scene.add(mesh,mesh2);//網(wǎng)格模型添加到場景中
縮放幾何體box,你可以發(fā)現(xiàn)上面代碼中的兩個(gè)網(wǎng)格模型的大小都發(fā)生了變化,因?yàn)榫W(wǎng)格模型克隆的時(shí)候,mesh對象的幾何體對象mesh.geometry屬性值是box對象的索引值,返回的新對象mesh2幾何體屬性mesh.geometry的值同樣是box對象的索引值。
box.scale(1.5,1.5,1.5);//幾何體縮放注意
通過本節(jié)課的學(xué)習(xí),對Threejs不同對象的克隆.clone()和復(fù)制.copy()方法有一個(gè)大致印象即可。
實(shí)際開發(fā)的時(shí)候,注意不同對象的復(fù)制或克隆方法可能稍有區(qū)別,使用的時(shí)候最好通過代碼測試,或者直接查看threejs源碼某個(gè)類對.clone()和.copy()封裝,這樣更為直觀清楚。
幾何體復(fù)制和克隆幾何體克隆或復(fù)制和網(wǎng)格模型在屬性值深拷貝、淺拷貝方面有些不同,比如幾何體的頂點(diǎn)屬性Geometry.vertices,Geometry.vertices的屬性值是一個(gè)數(shù)組對象,但是復(fù)制或克隆的時(shí)候,不是獲得對象的索引值,而是深拷貝屬性的值,可以在threejs源碼Geometry.js全文檢索copy: function關(guān)鍵詞,找到該類對copy方法的封裝細(xì)節(jié)。
上一篇:Three.js教程:模型對象旋轉(zhuǎn)平移縮放變換 (mvrlink.com)
下一篇:Three.js教程:常見光源類型 (mvrlink.com)
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請聯(lián)系工作人員刪除。