three.js引入glsl文件并高亮顯示代碼的完整步驟
同一個js文件中引入glsl
在three.js中自己寫shader語言的時候,我們需要把glsl與JavaScript兩種語言結(jié)合起來,即在ShaderMaterial中傳入對象,從而引入shader。實際上,對象中的vertexShader和fragmentShader兩屬性的值是String,所以最簡單的辦法就是將整個shader代碼作為字符串:
//vertexShader字符串 const vertexShader = ` void main() { gl_Position = vec4(position, 1.0); } `; //fragmentShdaer字符串 const fragmentShader = ` void main() { gl_Fragment = vec4(1.,0.,0.,1.); } `; //作為值傳入對象的vertexShader,fragmentShader屬性 const material = new THREE.ShaderMaterial({ vertexShader, //鍵值對同名,可省略值 fragmentShder, })
glsl文件與js文件分開
這樣在three.js中引入shader語言當(dāng)然可以運(yùn)行,但問題在于這樣shader語言和JavaScript原因在同一個文件夾中,不好管理,我們需要將js文件和glsl文件單獨(dú)成兩個文件,最好形成如下的文件結(jié)構(gòu):
(1)shader文件夾
vertexShader.glsl
fragmentShader.glsl
(2)app.js
(3)index.html
但問題在于js并不能importglsl文件,所以我能只好將.glsl改成.js,將shader語言作為js的字符串進(jìn)行import,上述的文件結(jié)構(gòu)就變成了:
(1)shader文件夾
vertexShader.js
fragmentShader.js
(2)app.js
(3)index.html
//vertexShader.js const vertexShader = ` void main() { gl_Position = vec4(position, 1.0); } `; export default vertexShader; //app.js import vertexShader from './shader/vertexShader.js'; import fragmentShader from './shader/fragmentShader.js';
確實這樣就將js文件和glsl文件分開了,但是這樣shader語言以字符串導(dǎo)入到j(luò)s中,其本身沒有問題,因為在js中,shader就是以一段字符串傳的形式給GPU。但一個問題在于,我們在編輯器中看到的shader語言沒有高亮,因為它們只是一段字符串,全部一樣顏色,這是非常不方便的。
高亮顯示glsl代碼
這里需要下載插件Comment target templates.
使用步驟非常簡單,只需加上/*glsl*/
,告訴插件字符串里的東西是glsl語言:
//vertexShader.js const vertexShader = /*glsl*/` void main() { gl_Position = vec4(position, 1.0); } `; export default vertexShader;
最終在vscode中的顯示效果:
當(dāng)然在three.js中引入shader語言的方式有很多,也可以放到html中,放在<script>
標(biāo)簽里面。插件Comment target templates讓shader語言作為字符的時候能夠高亮,這真的很方便。通過一些打包工具,也可以直接將.glsl
文件直接引入js中去,但可能配置比較麻煩,目前這種方式已經(jīng)能很好滿足我得需求了。
總結(jié)
到此這篇關(guān)于three.js引入glsl文件并高亮顯示代碼的文章就介紹到這了,更多相關(guān)three.js引入glsl并高亮代碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Javascript摸擬自由落體與上拋運(yùn)動原理與實現(xiàn)方法詳解
這篇文章主要介紹了Javascript摸擬自由落體與上拋運(yùn)動,結(jié)合實例形式分析了Javascript摸擬自由落體與上拋運(yùn)動相關(guān)原理、實現(xiàn)技巧與操作注意事項,需要的朋友可以參考下2020-04-04高性能WEB開發(fā) flush讓頁面分塊,逐步呈現(xiàn) flush讓頁面分塊,逐步呈現(xiàn)
在處理比較耗時的請求的時候,我們總希望先讓用戶先看到部分內(nèi)容,讓用戶知道系統(tǒng)正在進(jìn)行處理,而不是無響應(yīng)。2010-06-06國外大牛IE版本檢測!現(xiàn)在IE都到9了,IE檢測代碼
有時會去看看國外大牛的一些代碼,并學(xué)習(xí),引用,并感嘆大牛就是大牛,差距不是一點點,也在一點點的感嘆中慢慢拉進(jìn)和大牛的距離2012-01-01JavaScript事件類型中焦點、鼠標(biāo)和滾輪事件詳解
這篇文章主要為大家詳細(xì)介紹了JavaScript事件類型中焦點、鼠標(biāo)和滾輪事件,以及注意事項,感興趣的小伙伴們可以參考一下2016-01-01Javascript保存網(wǎng)頁為圖片借助于html2canvas庫實現(xiàn)
借助于html2canvas庫,把網(wǎng)頁保存為Canvas畫布,再把生成的canvas保存成圖片,下面的示例,大家可以看看2014-09-09JS操作XML實例總結(jié)(加載與解析XML文件、字符串)
這篇文章主要介紹了JS操作XML的方法,結(jié)合實例形式總結(jié)分析了JavaScript加載與解析XML文件及字符串的相關(guān)技巧,需要的朋友可以參考下2015-12-12