[WebGL入門]七,context的初始化
注:文章譯自http://wgld.org/,原作者杉本雅広(doxas),文章中如果有我的額外說明,我會加上[lufy:],另外,鄙人webgl研究還不夠深入,一些專業詞語,如果翻譯有誤,歡迎大家指正。
非常重要的初始化
從這次開始,開始著手WebGL的處理。首先是WebGL的初始化,完成渲染前的所有準備。
前面的文章也給過HTML的雛形,還記得吧,像下面的程式碼這樣。
<html>
<head>
<title>WebGL TEST</title>
<script src="script.js" type="text/javascript"></script>
</head>
<body>
<canvas id="canvas"></canvas>
</body>
</html>
這一次,從這個程式碼開始說明,這個HTML程式碼,純粹只是在頁面上放置一個canvas,從這個canvas中獲取context,然後進行WebGL的初期化。獲取context
剛才的程式碼,在head標籤中引用了外部js檔案script.js,那麼來看一下這個檔案中的程式碼。首先,通過getElementById來取得canvas。
var c = document.getElementById('canvas');
這樣,c就表示canvas物件,接下來定義canvas的大小。c.width = 500;
c.height = 300;
這樣就把canvas的大小設定成了寬500px,高300px了。當然,這個canvas的大小可以根據你的需求自由的設定。我這裡是隨便設定的,沒有什麼特別的意思。接著,獲取WebGL的context,需要使用getContext函式,getContext函式是從canvas中獲取context物件,引數是字串,指定你想要獲取的context的名稱。
本文寫的時候(2012年2月),WebGL的context,還不能通過正式的名稱webgl來獲取,必須使用experimental-webgl來獲取context物件。
但是,以後也有可能通過正式的名稱來獲取context,所以,在獲取context物件的時候,使用或運算(||)來按照名稱的順序來執行。
var gl = c.getContext('webgl') || c.getContext('experimental-webgl');
如果瀏覽器支援的話,這個時候gl就是你獲取到的WebGL的context,接下來就通過gl來操作WebGL。畫面的初始化
WebGL的context和之前的context(開始WebGL之前,先了解一下canvas)一樣,都是包含了繪圖相關的各種各樣的處理的物件,裡面有非常多的函式,常量和屬性。
在這些函式裡,有一個是用來清除畫面的,函式名叫做clear,其實看名字就知道了吧......
這個函式將畫面清空,回到一個全新的狀態。引數是要清空的物件,或者是WebGL中定義的常量。這一次,只是清空一下畫面上的顏色,所以使用COLOR_BUFFER_BIT這個常量,這個常量是為了使用canvas裡面指定的顏色來清空畫面而定義的。
gl.clear(gl.COLOR_BUFFER_BIT);
如果要清空畫面所使用的顏色的話,就必須得另外定義了。這個函式是clearColor。clearColor函式的引數有四個,就是單純的RGBA,很直觀吧,使用方法如下。gl.clearColor(0.0, 0.0, 0.0, 1.0);
像上面這樣,clear方法執行的時候,就會使用黑色將畫面初期化。引數的數值的指定範圍是0 ~ 1之間,注意不可以像普通的HTML中那樣使用16進位制的顏色。上面的處理整理一下的話,就是下面的script.js程式碼,因為要在頁面載入完才能執行,所以把程式碼寫在onload中。
onload = function(){
// canvasエレメントを取得
var c = document.getElementById('canvas');
c.width = 500;
c.height = 300;
// webglコンテキストを取得
var gl = c.getContext('webgl') || c.getContext('experimental-webgl');
// canvasを黒でクリア(初期化)する
gl.clearColor(0.0, 0.0, 0.0, 1.0);
gl.clear(gl.COLOR_BUFFER_BIT);
};
點選下面的連線,可以看一下實際的demo。獲取WebGL的context,然後進行初期化的demo
這個例子,只是純粹的獲取一下WebGL的context,然後使用黑色將canvas清空一下而已,所以畫面只是一片黑色。但是如果畫面可以執行出來的話,WebGL的準備工作就算基本完成了。
總結
這一次,只是獲取一下WebGL的context,然後將使用黑色將畫面清空一下。但是事實上,這樣就可以開始使用WebGL了。
接下來,會更具體更詳細的介紹WebGL相關的處理,但不管做什麼,基礎都是很重要的,這次的內容還是需要徹底理解一下的。
下次,介紹一下著色器相關的基礎知識。
相關文章
- webgl入門(1)-什麼是webglWeb
- webgl世界 matrix入門Web
- webgl入門(2)-初識webgl和著色器Web
- [WebGL入門]四,渲染準備Web
- Khronos Group的WebGL工作組主席Ken Russell為《WebGL入門指南》作序Web
- [WebGL入門]一,瀏覽器的準備Web瀏覽器
- [WebGL入門]二,開始WebGL之前,先了解一下canvasWebCanvas
- [WebGL入門]九,頂點快取的基礎Web快取
- [WebGL入門]五,矩陣的基礎知識Web矩陣
- WebGL入門之基於WebGL的3D視覺化引擎介紹Web3D視覺化
- [WebGL入門]十四,繪製多邊形Web
- context要如何初始化Context
- [WebGL入門]十一,著色器的編譯和連線Web編譯
- [WebGL入門]八,著色器的說明和基礎Web
- Three.js入門篇之1 - WebGL on HTMLJSWebHTML
- [WebGL入門]六,頂點和多邊形Web
- pytorch入門(七):unsqueezePyTorch
- Go語言的context包從放棄到入門GoContext
- webgl入門(3)-座標系與滑鼠互動Web
- webGL入門-四階貝塞爾曲線繪製Web
- [WebGL入門]十,矩陣計算和外部庫Web矩陣
- Java入門教程七(陣列)Java陣列
- linux 入門(七)-ffmpeg使用Linux
- [WebGL入門]三,3D繪圖的基礎知識Web3D繪圖
- [WebGL入門]十二,模型資料和頂點屬性Web模型
- mybatis入門基礎(七)----延遲載入MyBatis
- 小豬的C語言快速入門系列(七)C語言
- React 從入門到進階之路(七)React
- Jersey 開發RESTful(七)Jersey快速入門REST
- JS基礎入門篇(七)—運算子JS
- jQuery入門筆記之(七)外掛jQuery筆記
- vc入門寶典七(工具欄) (轉)
- 入門篇-其之七-Java運算子Java
- WebGL載入本地模型Web模型
- 【Go語言入門系列】(七)如何使用Go的方法?Go
- [WebGL入門]十三,minMatrix.js和座標變換矩陣WebJS矩陣
- vue 快速入門 系列 —— Vue 例項的初始化過程Vue
- 查詢初始化引數的方法(七)