準備WebGL Canvas - OpenHome.cc
文章推薦指數: 80 %
透過WebGL,瀏覽器可以將大部份的繪圖渲染運算,送進專司影像運算的圖形處理器(Graphics Processing Unit,GPU),從而增加瀏覽器上的繪圖效率,若對HTML5 Canvas ...
回WebGL
最近玩3D建模發現了SculptGL,一個簡單、基於瀏覽器的雕塑應用程式,執行之流暢令人驚奇。
SculptGL的底層是基於WebGL,WebGL則是基於OpenGLES(OpenGLforEmbeddedSystems),這是OpenGL(OpenGraphicsLibrary)的嵌入式系統特化版本,至於OpenGL應該不用多做解釋了,玩2D、3D渲染的開發者,都知道的高效程式庫。
透過WebGL,瀏覽器可以將大部份的繪圖渲染運算,送進專司影像運算的圖形處理器(GraphicsProcessingUnit,GPU),從而增加瀏覽器上的繪圖效率,若對HTML5CanvasAPI、SVG繪圖等在效率上不滿意的話,可以試著使用基於WebGL的程式庫,像是PixiJS、Three.js等,或者直接玩WebGL。
WebGL常被誤解為一套JavaScriptAPI,確實地,開發者可以透過JavaScript來處理HTML頁面、與使用者的互動等,並呼叫WebGL制訂的JavaScriptAPI與著色器程式進行溝通,然而,撰寫著色器程式需要GLSL(OpenGLShadingLanguage),這是一個類似C語言的程式語言。
開發者需要使用GLSL撰寫著色器(Shader),透過JavaScriptAPI編譯、為Canvas繫結、建立著色器並送入GPU,之後透過JavaScript將繪圖需要的資料透過API送給著色器程式來渲染,也就是說,想要認識WebGL,對GLSL的認識也是不可少的。
圖像最後是在Canvas上渲染的,因此起手式就是準備一個Canvas,就WebGL第一個範例來說,目標就設定在令Canvas使用整個瀏覽器視埠(viewport),背景為黑色,暫時不會涉及GLSL與著色器!
無論如何,先有個Canvas再說:
也就是說,HTML標籤的width、height調整的DOM元素的尺寸,也可以透過DOM元素的width、height特性取得或設定值;CSS的width、height調整的是顯示尺寸,可以透過DOM元素的clientWidth、clientHeight特性取得或設定值,或者是透過window.getComputedStyle取得運算樣式(Computedstyle)。
如果會使用CSS來放大Canvas顯示尺寸,並希望不希望有鋸齒狀的顯示結果,可以在取得Canvas顯示尺寸之後,設定DOM元素的width、height特性,例如,想要使用整個瀏覽器視埠的話,基本上可以這麼做:
接著,可以從Canvas取得支援WebGL的Context物件,這是透過CanvasDOM物件的getContext方法指定Context類型來取得,對於支援WebGL第一版的瀏覽器要傳入字串'webgl',這系列的文件,若沒有特別提醒,討論的對象就是指WebGL第一版,對於WebGL第二版要傳入'webgl2',如果不支援的話,getContext傳回null,如果支援的話,傳回WebGLRenderingContext實例。
第一次建立WebGL的Context物件時,視埠的大小與Canvas大小是一樣的,如果需要自行設定視埠大小,或者在Canvas改變大小時,重新設定視埠大小,可以使用viewport方法: gl.viewport(0,0,canvas.width,canvas.height); 想要設定背景為黑色,方式是設定清除色為黑,並用清除色來清除色彩緩衝區。
設定清除色可以使用WebGLRenderingContext的clearColor方法,其前三個參數為RGB設定,最後一個參數為不透明度,都是接受0.0到1.0的值;清除色彩緩衝區的話,可使用clear方法傳入WebGLRenderingContext上的COLOR_BUFFER_BIT常數。
因此整個範例可以寫為:
延伸文章資訊
- 1準備WebGL Canvas - OpenHome.cc
透過WebGL,瀏覽器可以將大部份的繪圖渲染運算,送進專司影像運算的圖形處理器(Graphics Processing Unit,GPU),從而增加瀏覽器上的繪圖效率,若對HTML5 Canva...
- 2WebGL vs Canvas| Top Comparisons to Learn with Infographics
WebGL is the version of OpenGL, which is a 3D engine. It helps its user to perform 3D manipulatio...
- 3Taking A Screenshot of the Canvas - WebGL Fundamentals
A common question is how to make a WebGL animation be the background of a webpage. There are 2 ob...
- 4HTML5 Canvas,WebGL,CSS Shaders,GLSL的暧昧关系 - 张鑫旭
互联网的发展相当的神速,其他不说,就前端技术这块,出现的些新名词或生名词就让人眼花缭乱,应接不暇,比如说:HTML5 Canvas, WebGL, CSS Shaders, ...
- 5WebGL 入門- Web APIs
WebGL 讓網頁內容能藉由一種基於 OpenGL ES 2.0 的API 的幫助,於支援此API 的瀏覽器環境中,不需使用外掛程式就能在HTML的 canvas 元素中實現二維及三維渲染。