[Three.js] 概述與第一個範例

先用第一個簡單的範例讓大家看一下 Three.js 的效果,首先要記得把 library 讀進來,我這邊使用的是這一隻:

https://cdnjs.cloudflare.com/ajax/libs/three.js/110/three.min.js

也可以到官網下載目前最新的版本到自己的電腦裡再讀入。

接著照官方範例來看,我們先

1. 建立一個場景:

var scene = new THREE.Scene();

 

2. 建立相機

var camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );

關於相機的參數可以先看一下官方文件 THREE.PerspectiveCamera 的說明,官方使用的是透視投影相機(PerspectiveCamera)。

裡面的一些參數設定與說明如下:

  • 視角(fov, field of view):又稱為視野、視場,指的是我們能從畫面上看到的視野範圍,一般在遊戲中會設定在 60 ~ 90 度。
  • 畫面寬高比(aspect):渲染結果的畫面比例,一般都是使用 window.innerWidth / window.innerHeight 。
  • 近面距離(near):從距離相機多近的地方開始渲染,一般推薦使用 0.1。
  • 遠面距離(far):相機能看得多遠,一般推薦使用 1000,可視需求調整,設置過大會影響效能。

 

3. 建立渲染器:

//選擇渲染器
var renderer = new THREE.WebGLRenderer();
//設定尺寸
renderer.setSize( window.innerWidth, window.innerHeight );
//把渲染器加到網頁上
document.body.appendChild( renderer.domElement );

 

4. 建立物件

//設定物體
var geometry = new THREE.BoxGeometry();
//設定材質
var material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
var cube = new THREE.Mesh( geometry, material );
//加到場景
scene.add( cube );

camera.position.z = 5;

這裡利用 THREE.BoxGeometry 來建立立方體,一般建立物體的就是先宣告形狀(geometry)與材質(material),然後用這兩個要素建立一個網格物件(mesh),再設定位置後加到場景中便可完成。

 

5. 增加動畫

function animate() {
	requestAnimationFrame( animate );
	renderer.render( scene, camera );
}
animate();

若是要讓場景中的物體動起來,就需要每隔一段時間重新渲染場景,而這就是程式裡面 requestAnimationFrame 所負責的部分。

requestAnimationFrame 是 HTML5 中瀏覽器提供的一個為動畫而生的接口,它能讓畫面盡可能平滑與高效地進行重新渲染,還能有效節省 CPU、GPU 資源,所以一般在 Three.js 會透過它來幫忙重新渲染場景。

這邊是讓 cube 不停的旋轉:

cube.rotation.x += 0.01;
cube.rotation.y += 0.01;

利用不停呼叫 animate 並執行 requestAnimationFrame,就可以讓場景不停地渲染並變成動畫了。

 

完整的程式碼:

 

官方的第一個範例是建立一個立方體,並讓他在場景中不停的旋轉,這個範例沒有用到光源,所以會看到的是一個單色的立方體在空間中不斷旋轉,之後打上光後看起來就會比較自然了。

 

參考:

Three.js Create a scene

用 Three.js 來當個創世神 (03):Hello Three.js!

 

課程推薦

AI工作術全面學習實戰營:6 堂精選課程,學會最好用 AI 工具,翻轉你的人生

AI工作術全面學習實戰營:6 堂精選課程,學會最好用 AI 工具,翻轉你的人生

《PChome雜誌》攜手 5 位在 AI 領域的專業講師,打造上述 6 堂實用課程,教你學會時下最好用的 AI 工具,導入生成式 AI 來產製工作內容,改造並升級你的工作流程。

輸入折扣碼 ZERO2024 還可以額外獲得 NT$400 優惠喔。

HTML與SEO實戰應用—並以ChatGPT助力提升網站品質與流量

HTML與SEO實戰應用—並以ChatGPT助力提升網站品質與流量

本課程專為希望深入了解 HTML 並有效結合 SEO 策略的學員設計。我們將重點放在 HTML 的深度學習與應用上,同時穿插介紹如何透過搜索引擎優化提升網站能見度。透過即時互動式的直播教學,加上 ChatGPT 的輔助,您將學習到如何建立一個結構優良、美觀且符合 SEO 標準的網站。這不僅會提升網站的用戶體驗,還會大幅提高網站的搜索引擎排名,進而增加訪客流量和潛在客戶。
用AI強化職場競爭力 ChatGPT、Midjourney從入門到精通

用AI強化職場競爭力 ChatGPT、Midjourney從入門到精通

在快速變遷的職場中,提升競爭力成為關鍵。透過引領潮流的AI技術,ChatGPT和Midjourney將助您勇攀高峰。無論您是AI新手還是專家,這個課程將引導您從入門到精通,解密AI的奧秘,並學習如何運用於職場。
GitHub Copilot AI 程式碼編輯工具應用實務班

GitHub Copilot AI 程式碼編輯工具應用實務班

讓學員瞭解有效地使用該工具來加速開發流程、提高程式碼品質和生產力。課程重點放在以 JavaScript 程式語言為例,介紹 Copilot 的基本原理、使用方法和最佳實踐。

輸入折扣碼 TC1456JA 還可以額外獲得 NT$500 優惠喔。

ChatGPT X Clipchamp AI 生成影片、配音與字幕應用實戰班

ChatGPT X Clipchamp AI 生成影片、配音與字幕應用實戰班

掌握Clipchamp AI的操作技巧,靈活運用Clipchamp AI進行影片編輯和創作,實現創意表達和傳播目的。

輸入折扣碼 TC1451JAN 還可以額外獲得 NT$500 優惠喔。

如何串接多種數位工具資訊?Looker Studio 資料視覺化實戰班|GoogleAds x FB廣告 x GA流量數據

如何串接多種數位工具資訊?Looker Studio 資料視覺化實戰班|GoogleAds x FB廣告 x GA流量數據

Looker Studio除了可協助使用者監控網站流量、廣告成效、選擇匯入資源的管道之外,還可以將數據資料多平台整合、數據報表即時更新、數據範本可重複套用的效益,透過自動化系統,將數據全部匯入同一個報表平台,是企業不可或缺的重要工具。

輸入折扣碼 TC1270JIA 還可以額外獲得 NT$500 優惠喔。

和我們交流

加入我們的社群,裡面會有一些技術的內容、有趣的技術梗,以及職缺的分享,歡迎和我們一起討論。