天氣越來越冷了,人也越來越懶怠,越來越像待在溫暖的寢室裡看小說或打遊戲,也好久沒看Three.js原始碼了。今天天氣不錯,接著看!
這次從光照部分看起:光照模型,從光線本身角度來看包括環境光、平行光、點光源,從物體表面材質角度看又包括漫反射和鏡面反射。
Lights:Light
this.color = new THREE.Color( hex );
};
在Three.js中,光照作為一種Object3D對象,是經過Scene.add()方法加入到場景中的,渲染器會自動渲染所加入的光照效果。
Light::AmbientLight
無方向的環境光,且沒有比Light型多一個屬性或方法,而僅僅為了語意上的繼承而繼承自Light,它甚至沒有必要是Object3D物件。
複製代碼
this.castShadow = false;
this.onlyShadow = false
// more settings about shadow ......
};
平行光(有方向的光),使用new運算子建構此函數時需傳入顏色hex和光線的“密度”intensity。這個類別有這樣一些屬性:
position:一個位置,以此位置為起點,原點為終點的方向是光線的方向。
intensity:光線的密度,預設為1。因為RGB的三個值都在0~255之間,無法反映出光照的強度變化,光照越強,物體表面就更明亮。
castShadow:布林值,控制是否產生陰影,預設為false。如果設為true,則對於所有表面都會逐像元地計算其在光照方向上是否被遮擋,這會消耗大量的計算。
onlyShadow:布林值,控制是否只產生陰影而不「照亮」物體,預設為false。這種模式也許有什麼特殊應用吧。
shadowCameraLeft,shadowCameraRight…系列,以position點為中心控制產生陰影的範圍?
shadowBias:陰影偏心,預設為0。
shadowDarkness:陰影對物體亮度的影響,在0~1之間,預設為0.5。
還有不少屬性暫時猜不出意義(真該去補補電腦圖形學啊,硬著頭皮繼續看吧)。
Light::PointLight
複製程式碼
THREE.SpotLight = function ( hex, intensity, distance, angle, exponent ) {
THREE.Light.call( this, hex );
this.position = new THREE.Vector3( 000 , 1, 0 );
this.target = new THREE.Object3D();
this.intensity = ( intensity !== undefined ) ? intensity : 1;
this.distance = (distance != = undefined ) ? distance : 0;
this.angle = ( angle !== undefined ) ? angle : Math.PI / 2;
this.exponent = ( exponent !== undefined ) ? exponent : exponent = ( exponent !== undefined ) ? exponent : 100; // more settings about shadow...
};
一種可以在某個方向上產生陰影的點光源,影響MeshLamberMaterial和MeshPhongMaterial類型材質的表面。對陰影如何處理的設定和DirectionLight一致。
總之,光照物件並不承擔渲染光照的任務,而只是定義如何渲染光照。
Object::Partical
};
粒子就是一個由材質的Object3D,這很好理解。 Object3D物件提供一個座標(就是粒子的座標),負責粒子的運動,粒子只需要指定表現它的材質。
Object::ParticalSystem
程式碼如下
THREE.ParticleSystem = function ( geometry, material ) {
THREE.Object3D.call( this );
this.geometry = geometry;
this.material = ( material !== undefine) ? material : new THREE.ParticleBasicMaterial( { color: Math.random() * 0xffffff } );
this.sortParticles = false;
if ( this.geometry ) {
if(this .Somepheretry. === null ) {
this.geometry.computeBoundingSphere();
}
this.boundRadius = geometry.boundingSphere.radius;
}
粒子系統表現多個粒子的運動,粒子系統本身繼承自是Object3D物件。有這樣幾個屬性:
geometry屬性,每一個節點都是一個粒子,這些共享一個材質。
material屬性,即這些節點的材質。
frustumCulled屬性,布林值,如果設定為真,那麼在相機視界之外的會被踢出,但還沒弄清楚是粒子系統中心座標在視界外就踢出整個粒子系統還是單一粒子出去了就剔除,猜測多半是後者。 其實這幾篇都是涉及怎麼定義場景的,至於怎麼渲染場景很難有深入。我準備接下來去看Demo的程式碼,結合者看看WebGLRenderer類別的原始碼(幾千行OMG)。

javaandjavascriptaredistinctlanguages:javaisusedforenterpriseandmobileapps,while javascriptifforInteractiveWebpages.1)JavaisComcompoppored,statieldinglationallyTypted,statilly tater astrunsonjvm.2)

JavaScript核心數據類型在瀏覽器和Node.js中一致,但處理方式和額外類型有所不同。 1)全局對像在瀏覽器中為window,在Node.js中為global。 2)Node.js獨有Buffer對象,用於處理二進制數據。 3)性能和時間處理在兩者間也有差異,需根據環境調整代碼。

JavaScriptusestwotypesofcomments:single-line(//)andmulti-line(//).1)Use//forquicknotesorsingle-lineexplanations.2)Use//forlongerexplanationsorcommentingoutblocksofcode.Commentsshouldexplainthe'why',notthe'what',andbeplacedabovetherelevantcodeforclari

Python和JavaScript的主要區別在於類型系統和應用場景。 1.Python使用動態類型,適合科學計算和數據分析。 2.JavaScript採用弱類型,廣泛用於前端和全棧開發。兩者在異步編程和性能優化上各有優勢,選擇時應根據項目需求決定。

選擇Python還是JavaScript取決於項目類型:1)數據科學和自動化任務選擇Python;2)前端和全棧開發選擇JavaScript。 Python因其在數據處理和自動化方面的強大庫而備受青睞,而JavaScript則因其在網頁交互和全棧開發中的優勢而不可或缺。

Python和JavaScript各有優勢,選擇取決於項目需求和個人偏好。 1.Python易學,語法簡潔,適用於數據科學和後端開發,但執行速度較慢。 2.JavaScript在前端開發中無處不在,異步編程能力強,Node.js使其適用於全棧開發,但語法可能複雜且易出錯。

javascriptisnotbuiltoncorc; sanInterpretedlanguagethatrunsonenginesoftenwritteninc.1)JavascriptwasdesignedAsignedAsalightWeight,drackendedlanguageforwebbrowsers.2)Enginesevolvedfromsimpleterterpretpretpretpretpreterterpretpretpretpretpretpretpretpretpretcompilerers,典型地,替代品。

JavaScript可用於前端和後端開發。前端通過DOM操作增強用戶體驗,後端通過Node.js處理服務器任務。 1.前端示例:改變網頁文本內容。 2.後端示例:創建Node.js服務器。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

禪工作室 13.0.1
強大的PHP整合開發環境

SublimeText3漢化版
中文版,非常好用