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

首頁 > 語言 > JavaScript > 正文

Three.js源碼閱讀筆記(基礎的核心Core對象)

2024-05-06 14:20:14
字體:
來源:轉載
供稿:網友
Three.js是一個比較偉大的webgl開源庫,它簡化了瀏覽器3D編程,使得使用JavaScript在瀏覽器中創建復雜的場景變得容易很多。Github上眾多webgl demo令我興奮不已,躍躍欲試。由于這個庫還處在開發階段,因此資料非常匱乏,愛好者大部分時間不得不通過閱讀該庫的源碼進行學習,我現在也準備這樣做。

這是第一篇筆記,先從最基礎的核心(Core)對象開始。
Core::Vector2
該構造函數用來創建一個表示二維向量的對象
代碼如下:
THREE.Vector2 = function ( x, y ) {
this.x = x || 0;
this.y = y || 0;
};

Vector2對象的功能函數采用定義構造函數的原型對象來實現,形如:
代碼如下:
THREE.Vector2.prototype = {
constructor: THREE.Vector2,
set: function ( x, y ) {
this.x = x;
this.y = y;
return this;
},
copy: function ( v ) {
this.x = v.x;
this.y = v.y;
return this;
},
...... // 更多的函數
};

函數set(x,y)用以指定向量的值,調用者本身的x,y值被影響了,而該方法本身又返回調用者本身,這種情況很常見,以下不再說明。通過文字能夠表述清楚功能的函數不再引用源代碼,這一點以下也不再說明。
函數copy(v)用來將向量v復制進調用者。
函數add(a,b)和函數sub(a,b)分別表示對向量a,b相加和相減。
函數addSelf(v)和subSelf(v)分別表示對調用者本身加上或減去向量v。
函數multiplyScale(s)和divideScale(s)分別表示對調用者本身乘以或除以s。
函數lerpSelf(v,alpha)將調用者向v所指的方向旋轉alpha,當alpha為1時,調用者最終等于v,而當alpha=0時,調用者還等于原來。
代碼如下:
lerpSelf: function ( v, alpha ) {
this.x += ( v.x - this.x ) * alpha;
this.y += ( v.y - this.y ) * alpha;
return this;
},

函數negate()對調用者取反。
函數dot(v)返回float類型的調用者和向量v的點乘。
函數lengthSq()和函數length()返回float類型的調用者長度平方或長度。
函數normalize()將調用者本身歸一化。
函數distanceToSquared(v)和distanceTo(v)將返回調用者和向量v的距離。這里的距離其實是兩向量起點都在原點時,終點之間的距離,也就是向量this-v的長度。
函數setLength(s)將向量的長度縮放至為s,方向不變。
函數equals(v)判斷調用者與向量v的值是否相同。
函數isZero()判斷調用者是否是零向量。
函數clone()返回一個與調用者值一樣的新向量,相當于將其復制出去,注意與copy(v)的區別。
Core::Vector3
該構造函數創建一個表示三維向量的對象
代碼如下:
THREE.Vector3 = function ( x, y, z ) {
this.x = x || 0;
this.y = y || 0;
this.z = z || 0;
};

三維向量和二維向量有許多共通之處,比如set,add,dot,length,clone等,此處盡數略去,只記錄三維向量比二維向量多出的部分函數。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 苍梧县| 怀化市| 望奎县| 大邑县| 黔西县| 社会| 株洲县| 绵阳市| 柏乡县| 贞丰县| 米脂县| 济阳县| 佛冈县| 凯里市| 新乡市| 洞口县| 广元市| 海伦市| 化德县| 恭城| 凤山市| 唐海县| 太原市| 铜梁县| 河北省| 始兴县| 乐都县| 古田县| 原阳县| 方城县| 宜阳县| 田东县| 宣汉县| 叶城县| 柳河县| 山东| 沙坪坝区| 绍兴县| 惠州市| 旺苍县| 合阳县|