iT邦幫忙

2021 iThome 鐵人賽

DAY 29
0
Modern Web

動起來吧!Web Motion 動態特效網頁學習日記系列 第 29

JS Library 學習筆記:Three.js 初見面,在2D畫面創造三維世界 (四)

在真實世界中,物體因為反射光進我們的眼中,而能被看見;因此,除了物體形狀外,材質與光之間的關係是3D模擬的重要元素。

加上光源,創造立體感

上一篇使用MeshStandardMaterial時,在場景中加上的是環境光源AmbientLight

const boxGeometry = new THREE.BoxGeometry();
//使用會受光源影響的MeshStandardMaterial
const material = new THREE.MeshStandardMaterial( { color: 0xa45} );
const cube = new THREE.Mesh( boxGeometry, material );

//建構基礎環境光源
const light = new THREE.AmbientLight( );
scene.add( light );

除了環境光源AmbientLight外,Three.js還提供了模擬燈泡發光的點光源PointLight、聚光燈SpotLight、平面光光源RectAreaLight、模擬光源無限遠的平行光DirectionalLight、場景上方的半球體光源HemisphereLight等,光源一樣需要先利用new建構出來並將光源加進場景。

//建構基礎聚光燈,並加進場景中
const spotLight = new THREE.SpotLight( );
scene.add( spotLight );

不同類型的光源可傳入的參數不盡相同,多數可依照需求傳入顏色color和光照強度intensity,在建構時傳入相關數值即可定義出不同光源。另外,與光照強度intensity類似,控制光的強弱還有power光功率屬性,像是點光源PointLight、聚光燈SpotLight都有提供,可以做對應設定。

//建構光源,第一個參數定義色光,第二個則為光照強度
const yellowSpotLight = new THREE.SpotLight( 0xffff00, 60 );
const redSpotLight = new THREE.SpotLight( 0xff0000, 60 );
const pointLight = new THREE.PointLight( 0xffff00 );

//設定光源的位置
yellowSpotLight.position.set( -3, 5, -1 );
redSpotLight.position.set( 3, 5, 6 );
pointLight.position.set( 0, 0, 1 );

//除了光照強度(intensity)外,也可以設定power改變光的強弱
pointLight.power= 80 *Math.PI;

//別忘了要將光源加進場景中!
scene.add( yellowSpotLight, redSpotLight, pointLight );

攝影機、物件和光源都具有position可以設定,可以分別指定xyz進行設定,或使用set()同時設定三軸數值。而定義旋轉角度的rotation也與position相同,可以分別指定三軸數值,也可使用set()同時設定。

SpotLight.position.x = -3;
SpotLight.position.y = 5;
SpotLight.position.z = -1;
cube.rotation.set( 1, 1, 0 );

上一篇
JS Library 學習筆記:Three.js 初見面,在2D畫面創造三維世界 (三)
下一篇
JS Library 學習筆記:Three.js 初見面,在2D畫面創造三維世界 (五)
系列文
動起來吧!Web Motion 動態特效網頁學習日記30

尚未有邦友留言

立即登入留言