準備WebGL Canvas - OpenHome.cc
文章推薦指數: 80 %
SculptGL 的底層是基於WebGL,WebGL 則是基於OpenGL ES(OpenGL . ... 接著,可以從Canvas 取得支援WebGL 的Context 物件,這是透過Canvas DOM 物件的 getContext 方法 ...
回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常數。
因此整個範例可以寫為:
延伸文章資訊
- 1What is the difference between getContext('webgl') vs ...
A drawing context lets you draw on the canvas. Calling getContext with "2d" returns a CanvasRende...
- 2Canvas 2D 學習筆記
canvas 元素由HTML 標準定義,W3C 還制定了HTML Canvas 2D Context 標準,該標準 ... 都支援canvas 元素實現3D 繪圖呈現,getContext() ...
- 3canvas中的getContext()方法以及webgl中的getContext()方法
var gl = canvas.getContext('webgl');. 获得画布的WebGL渲染上下文后,可以在其中进行渲染。 三、 ...
- 4WebGL 入門- Web APIs
在此我們做的第一件事是取得 canvas 元素的參考,並存入 canvas 變數中。 一旦我們取得了canvas ,我們透過呼叫 getContext 並傳入 "webgl" 字串來取得 ...
- 5getContext('webgl')與getContext('3d')有什麼區別? - 程式人生
我開始學習WebGL,因為我找到了一些舊的教程,我不知道2014年的正確方法是什麼? 我啟動了 <canvas> (基本),在教程中,他們會說: 使用 getContext('2d') 如果要 ...