2015-11-28 24 views
0

所以我注意到着色器必須在html文檔中聲明,而不是在外部js文件中。另外不同的着色器必須有與它們相關的不同的ID。我的問題是,在創建多個着色器時,是否必須創建多個腳本標記併爲每個不同的ID賦值,或者將所有類型的着色器都放在一個腳本標記中?Three.js爲不同的頂點/ fragmentShaders創建不同的ID?

<script id="vertexShader1" type="x-shader/x-vertex"> 
void main() {} 
</script> 

<script id="fragmentShader1" type="x-shader/x-vertex"> 
void main() {} 
</script> 


<script id="vertexShader2" type="x-shader/x-vertex"> 
void main() {} 
</script> 

<script id="fragmentShader2" type="x-shader/x-vertex"> 
void main() {} 
</script> 

回答

0

WebGL並不關心你的着色器源代碼來自哪裏。絕對沒有什麼能阻止你通過AJAX加載它們,通過WebSockets將它們流入,或者以某種方式將它們深藏在超級特殊的PNG圖像中。

將着色器存儲在HTML源代碼中以方便在頁面加載時很容易引用它們。

原始底層WebGL方法只是將字符串作爲着色器的源代碼,因此沒有任何東西強制您專門使用腳本標記。

+0

所以我不需要:x-shader/x-vertex? – Asperger

+0

我的意思是假設我將它加載到外部腳本文件中如何指定它是否是頂點或片段着色器代碼? – Asperger

+0

不,你不需要「x-shader/x-vertex」,你只需要一些不是「javascript」的東西,否則瀏覽器會嘗試執行代碼。 – gman