前言
這是我第一篇學習 shader 的文章,藉由上完 three.js journey lessons 27 - Shaders 後,嘗試延伸用老師的範例畫出自己國家的國旗
為什麼需要寫 shader?
Three.js 裡已經有內建各式各樣的 Geometry (ex. PlaneGeometry, BoxGeometry) 可以創建不同形狀的物體,但如果需要對這些 Geometry 裡個別的頂點們進行操作 (ex. 改變位置、顏色) 就需要 Shader 來進行精細的操作
這是我第一篇學習 shader 的文章,藉由上完 three.js journey lessons 27 - Shaders 後,嘗試延伸用老師的範例畫出自己國家的國旗
Three.js 裡已經有內建各式各樣的 Geometry (ex. PlaneGeometry, BoxGeometry) 可以創建不同形狀的物體,但如果需要對這些 Geometry 裡個別的頂點們進行操作 (ex. 改變位置、顏色) 就需要 Shader 來進行精細的操作
此為 event loop 系列文章 - 第 4 篇:
這篇文章想藉由閱讀 Vue.nextTick() 的源碼來看 event loop 的使用
官方文件寫明 Vue.nextTick() 是拿來等待下一次 DOM 更新的方法,因為 Vue 在每次響應式數據改變後是異步去更新 DOM,所以如果在數據改變後,馬上獲取 DOM 的資料會是舊的,這時就需要用到 Vue.nextTick() 獲取更新後的 DOM
1 | <script setup> |
此為 event loop 系列文章 - 第 3 篇:
在研究 event loop 的過程中,赫然發現原來瀏覽器已經有了原生的 queueMicrotask 讓開發者可以自行管理微任務的執行,下面我們來看看什麼情況下會需要用到這個功能吧
基本上 queueMicrotask 就如同使用 new Promise() 一樣,會將 callback 加入到 微任務佇列 (microtask queue)
1 | let callback = () => console.log("Regular timeout callback has run"); |
此為 event loop 系列文章 - 第 2 篇:
上一篇介紹了 event loop 的運行原理,這篇文章希望藉由各種範例進一步體會 event loop 的執行順序
1 | setTimeout(() => { |
此為 event loop 系列文章 - 第 1 篇:
event loop 是 js 中一個蠻重要的概念,雖然以前知道 宏任務 (macrotask) 及 微任務 (microtask) 優先級上的差別,但似乎一直不知道 event loop 與瀏覽器渲染間的關係,而大部分的文章都只單獨介紹 event loop 或是 瀏覽器渲染流程,所以寫了這篇文章統整 event loop 與 瀏覽器渲染 間的關聯性
以前端來說,在瀏覽器中使用者的畫面點擊、呼叫後端 api、window.addEventListener,這些全部都由 js 執行,但 js 是單線程的程式語言,同一時間就是只能做一件事,所以當事情同時發生時,需要讓 js 知道哪行程式碼是先被執行的、而接下來又該執行哪段程式碼,這個負責安排執行順序的東西,基本上就叫做 event loop
嚴格來說 event loop 並不是定義在 js 上的東西,而是根據不同環境有不同的 event loop 規則,以瀏覽器來說就會有瀏覽器的 event loop 規則,而 nodejs 的話又會有另一套 nodejs 的 event loop 規則,今天這篇文章只探討瀏覽器的 event loop
THREE.Vector3 是 threejs 中最常用到的基礎類別,代表 3 維向量的運算
1 | const addVector3 = new THREE.Vector3(1, 1, 1); |
1 | const addScalarVector3 = new THREE.Vector3(1, 1, 1); |
THREE.Plane 在 threejs 中用來表示數學上的平面
a, b, c 代表平面的法向量,d 是一個常數值
1 | ax + by + cz + d = 0; |
以下程式碼創建了一個 y - 1 = 0 的平面,法向量為 [0, 1, 0],常數值為 -1
1 | const plane = new THREE.Plane(new THREE.Vector3(0, 1, 0).normalize(), -1); |