国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Three.js源碼閱讀筆記(Object3D類)

2024-05-06 14:20:15
字體:
來源:轉載
供稿:網友
這是Three.js源碼閱讀筆記的第二篇,直接開始。
Core::Object3D
Object3D似乎是Three.js框架中最重要的類,相當一部分其他的類都是繼承自Object3D類,比如場景類、幾何形體類、相機類、光照類等等:他們都是3D空間中的對象,所以稱為Object3D類。Object3D構造函數如下:
代碼如下:
THREE.Object3D = function () {
THREE.Object3DLibrary.push( this );
this.id = THREE.Object3DIdCount ++;
this.name = '';
this.properties = {};
this.parent = undefined;
this.children = [];
this.up = new THREE.Vector3( 0, 1, 0 );
this.position = new THREE.Vector3();
this.rotation = new THREE.Vector3();
this.eulerOrder = THREE.Object3D.defaultEulerOrder;
this.scale = new THREE.Vector3( 1, 1, 1 );
this.renderDepth = null;
this.rotationAutoUpdate = true;
this.matrix = new THREE.Matrix4();
this.matrixWorld = new THREE.Matrix4();
this.matrixRotationWorld = new THREE.Matrix4();
this.matrixAutoUpdate = true;
this.matrixWorldNeedsUpdate = true;
this.quaternion = new THREE.Quaternion();
this.useQuaternion = false;
this.boundRadius = 0.0;
this.boundRadiusScale = 1.0;
this.visible = true;
this.castShadow = false;
this.receiveShadow = false;
this.frustumCulled = true;
this._vector = new THREE.Vector3();
};

在介紹函數之前,需要先介紹一下這個類的幾個重要屬性。
屬性parent和children說明,通常需要使用樹來管理眾多Object3D對象。比如一輛行駛的汽車是一個Object3D對象,控制汽車行駛路線的邏輯在該對象內部實現,汽車的每個頂點經過模型矩陣的處理后,都位于正確的位置;但是汽車擺動的雨刮器,其不但隨著汽車行駛方向運動,而且自身相對汽車也在左右擺動,這個擺動的邏輯無法在汽車這個對象內部的實現。解決的方法是,將雨刮器設定為汽車的chidren,雨刮器內部的邏輯只負責其相對于汽車的擺動。在這種樹狀結構下,一個場景Scene實際上就是最頂端的Object3D,它的模型矩陣就是視圖矩陣(取決于相機)的逆矩陣。

屬性matrix和matrixWorld就很好理解了,matrix表示本地的模型矩陣,僅僅表示該對象的運動,而matrixWorld則需要依次向父親節點迭代,每一次迭代都左乘父親對象的本地模型矩陣,直到Scene對象——當然,實際上是左乘父親對象的全局模型矩陣。

屬性position、rotation、scale表示模型矩陣的三種變換部分,在Matrix4類中有相關說明。rotation和eulerOrder共同描述了一個旋轉狀態,quaternion也可以描述一個旋轉狀態,具體使用哪種方法要看useQuation的布爾值。

可以看到,關于該Object3D對象最重要的“變換狀態”信息實際上是存儲在兩個“備份”中的,一個是matrix對象,還有一個是position等屬性,兩部分應當保持一致,如果通過某種方法改變了一個備份,則另一個備份也應該在適當的時候更新。還有一些其他屬性從字面和類型上就能看出其含義,不再單獨列出了。下面說函數:
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 文山县| 仪陇县| 揭阳市| 青龙| 金塔县| 普兰店市| 沈阳市| 达尔| 舞阳县| 酉阳| 萍乡市| 五莲县| 千阳县| 张北县| 西丰县| 石家庄市| 道真| 龙川县| 金溪县| 南部县| 鄂州市| 清河县| 剑川县| 旺苍县| 来宾市| 焉耆| 通榆县| 绥阳县| 建瓯市| 花莲市| 垦利县| 界首市| 湘潭市| 平顶山市| 仁寿县| 九寨沟县| 黄平县| 淳安县| 连云港市| 西和县| 松江区|