此為 CORS Debug 系列文章 - 第 2 篇:
簡介
在上一篇文章 - 網頁快取導致的 CORS 問題 中,最終採用了 crossOrigin='anonymous'
這樣的方式解決網頁快取導致的 CORS 錯誤,原本以為這樣已經萬無一失,但沒想到更悲劇的事情發生了 => 在 Safari 瀏覽器有時候會發現網頁上的圖片都不見了

在上一篇文章 - 網頁快取導致的 CORS 問題 中,最終採用了 crossOrigin='anonymous'
這樣的方式解決網頁快取導致的 CORS 錯誤,原本以為這樣已經萬無一失,但沒想到更悲劇的事情發生了 => 在 Safari 瀏覽器有時候會發現網頁上的圖片都不見了
最近做到一個在網頁上展示圖片的功能,簡單來說就是點擊右側的圖片庫,左邊的主畫面可以展示大圖,如下圖所示,這是一個非常簡單的功能,但到最後發現這跟 CORS 有密切的關係,下面我們來一步步探討看看
前面幾篇系列文中介紹深度測試運作的原理,而決定畫面上的兩個物體誰遠誰近,除了跟物體之間深度值差異有關,另外也相同重要的是物體間渲染的順序,今天這篇文章就讓我們討論在 Three.js 中是如何根據不同種類的物體決定渲染順序
上一篇中我們知道透視投影的深度值 $ z_{depth} $ 和 $ 1/z $ 成正比,如此與人眼感知的狀況相符,對於近處物體的分辨率較高,而遠處物體不容易分辨清楚互相的前後關係,大部分情況下這個深度值的轉換函式可以很好的描述物體的遠近,但如果套用到大尺度的場景,例如:太陽系、宇宙等,這種深度值的轉換函式就會出問題,這篇文章討論會出現哪些問題,以及最後如何使用對數深度值轉換函式解決
上一篇提到了所有 像素(fragment) 對應的深度值都會落在 [0, 1] 區間內,0 代表這個 像素(fragment) 離相機最近,而 1 代表離相機最遠。但每個物體與相機之間的距離都不一樣,要如何把這些距離都轉換到深度值的 [0, 1] 區間內呢?這篇文章將討論如何將物體的距離($ z $ 值)轉換成 [0, 1] 區間內的深度值
上一篇系列文中,我們了解深度測試中不同 像素(fragment) 是如何藉由比較各自的深度值來決定誰會渲染在畫面上,接著我們將討論深度值在數學上是如何計算出來的,但在那之前需要一些必備的知識幫助我們理解後續的數學推導,所以第二篇的系列文我們來學習這部分 - 左手/右手座標系、齊次座標
我想許多人一開始接觸 Three.js 中關於 深度測試(Depth testing) 的時候,常會聽到 depthTest
, depthWrite
,雖然看過很多文章講解這兩者的差別以及應用場景,但說真的還是無法體會兩者差在哪,於是萌生了研究深度測試的想法。而隨著對於深度測試的了解後才發現深挖的東西越來越多,所以才有了這一系列相關的文章
繼上一篇 使用 Three.js 操作 shader 畫出國旗 後,這一篇文章希望了解 Three.js 裡的 shader 架構
因為 Three.js 的底層就是 WebGL 所以我們可以先從 WebGL 是如何綁定 shader 來找到 Three.js 中處理 shader 的起始點
1 | // WebGL 綁定 shader 部分片段 |