[WebGL入門]四,渲染準備
注:文章譯自http://wgld.org/,原作者杉本雅広(doxas),文章中如果有我的額外說明,我會加上[lufy:],另外,鄙人webgl研究還不夠深入,一些專業詞語,如果翻譯有誤,歡迎大家指正。
必須準備的東西
上次介紹了3D繪圖的基礎知識。講了一下由Z座標的不同決定的兩種座標系,以及座標變換的種類。這一次,說一說實際WebGL繪圖的時候必須準備的東西。
首先,HTML,javascript相關的基礎知識就不解釋了。如果,有不明白的單詞或概念的話,請自己查一下。我是認為你有一定的HTML和javascript基礎的前提下進行講解的。
HTML的準備
就像前面說的那樣(二,開始WebGL之前,先了解一下canvas),WebGL利用的是canvas的繪圖區域。也就是說,使用WebGL的網頁,HTML裡面肯定含有canvas標籤。
向這個canvas標籤上新增一個ID屬性,在javascript中使用getElementById等函式很容易能獲取到這個canvas物件,獲取了這個canvas之後,利用javascript可以完成所有的操作。
一個最低限度的HTML模版,就是像下面這樣。
<html>
<head>
<title>WebGL TEST</title>
<script src="script.js" type="text/javascript"></script>
</head>
<body>
<canvas id="canvas"></canvas>
</body>
</html>
上面程式碼中,script.js是自己準備的包含各種處理的javascript檔案。canvas的大小可以在HTML中設定,當然也可以使用javascript來動態制定。另外,所有的指令碼都寫在HTML中當然是可以的,個人認為將javascript程式碼分離成單獨的檔案比較好,這個不是必須的。
關於著色器
WebGL中,所謂的固定渲染管線是不存在的。估計會有人問,什麼是固定渲染管線?先來簡單說明一下。
固定渲染管線,簡單來說,就是3d渲染所進行的一連串的計算流程,就像流水線一樣。(說的有點太簡單了。)
固定渲染管線中,上次所說的模型,檢視,投影的座標變換都會替我們完成。不需要理解細節,只需要知道所有的這些座標變換都包含在裡面,都會幫我們計算好。
如果有了固定渲染管線,編寫程式就比較容易了,因為所有的變換都是由固定渲染管線來完成的,但是缺點就是自由度低。固定渲染管線只能完成一些最基本的操作,如果想要做一些特殊的處理,就比較麻煩了。
好了,固定渲染管線就說到這裡了。
前面說了,WebGL中不存在固定渲染管線。也就是說,座標變換必須全部由自己來做。而且,這個記述了座標變換的機制就叫做著色器(Shader)。
這樣可以由程式設計師控制的機制叫做可編輯渲染管線。而著色器又有 處理幾何圖形頂點的頂點著色器和處理畫素的片段著色器兩種型別。
由於WebGL中沒有固定管線,所以必須準備好頂點著色器和片段著色器。
著色器的處理方法
頂點著色器和片段著色器要怎麼準備呢?
實際上,著色器的新增可以有多種做法。著色器是由程式設計師自己編寫的,而且著色器的程式碼就是簡單的字串而已。所以,不管用什麼方法,只要把這個著色器字串傳給程式就可以了。
最簡單的方法,就是把著色器記錄在HTML中。使用這種方法的話,是利用HTML的script標籤來做的。下面是一個簡單的例子。
<script id="vshader" type="x-shader/x-vertex">
※頂點著色器
</script>
<script id="fshader" type="x-shader/x-fragment">
※片段著色器
</script>
canvas也一樣,為了在javascript中可以呼叫,給script標籤加上了id屬性。另外,type屬性是和javascript不同的,不要誤認為是javascript程式碼。>>指定type屬性的理由
type屬性指定了[x-shader/x-vertex]和[x-shader/x-fragment],這並不是HTML中定義的正式的寫法。但是一般的瀏覽器如果遇到不識別的標籤的話會無視掉的,瀏覽器不會認為這是javascript程式碼的。瀏覽器只會把它當成無意義的字串,而程式中則可以使用標籤裡面的內容。
另一個,也可以不使用script標籤來做。
主要是因為著色器的程式碼就是簡單的字串,可以直接在javascript內部定義字串。這樣的話,著色器被定義在了javascript檔案中,HTML的程式碼就變的簡單多了,並不是說,這種做法比前一種做法好。
總結
使用WebGL進行3D渲染,這次說了下面幾個必須要做的準備。
最低限度,需要HTML,canvas標籤,處理WebGL的javascript程式碼,頂點著色器和片段著色器的程式碼。
另外,比如要描畫3D模型的模型資料,圖片檔案等當然有時候也是需要的,但是根據你用WebGL想要做的東西不同而不同。真要說最新限度的話,只需要一個HTML檔案。javascript程式碼和著色器程式碼都可以記錄在HTML檔案中。
基本上,本網站的所有javascript程式碼都是記錄在單獨的檔案內的,而著色器的程式碼,也不是必須記錄在HTML中,要根據情況隨機應變吧。
下次,介紹3D繪圖的核心內容,矩陣。
相關文章
- [WebGL入門]一,瀏覽器的準備Web瀏覽器
- 機器學習入門準備機器學習
- webGL入門-四階貝塞爾曲線繪製Web
- 由淺到淺入門批量渲染(四)
- webgl入門(1)-什麼是webglWeb
- Laravel5.8 入門系列四,內容釋出功能準備工作Laravel
- JavaScript入門篇--請做好準備JavaScript
- webgl世界 matrix入門Web
- 渲染程式的筆試準備筆試
- webgl入門(2)-初識webgl和著色器Web
- 深入Weex系列(一)之Weex入門準備
- BCSphere入門教程:導言和知識準備
- kubernetes入門預先準備環境
- test 2D渲染器 WebGL WebGL2Web
- 01Prism WPF 入門實戰 - 專案準備
- 小程式入門簡介,你所需要準備的
- PIC微控制器入門教程(一)—— 準備工作
- ArcGIS API for Silverlight開發入門準備API
- [WebGL入門]二,開始WebGL之前,先了解一下canvasWebCanvas
- [WebGL入門]十四,繪製多邊形Web
- Canvas + WebGL中文藝術字渲染CanvasWeb
- 大資料入門的四個必備常識大資料
- Khronos Group的WebGL工作組主席Ken Russell為《WebGL入門指南》作序Web
- 1、Entity Framework Core 3.1入門教程-概述和準備工作Framework
- 為 Java 程式設計師準備的 Go 入門 PPTJava程式設計師Go
- Three.js入門篇之1 - WebGL on HTMLJSWebHTML
- [WebGL入門]七,context的初始化WebContext
- [WebGL入門]六,頂點和多邊形Web
- odoo 開發入門教程系列-準備一些操作(Action)?Odoo
- WebGL著色器渲染小遊戲實戰Web遊戲
- WebGL入門之基於WebGL的3D視覺化引擎介紹Web3D視覺化
- OpenGL/OpenGL ES入門: 影象渲染實現以及渲染問題
- webgl入門(3)-座標系與滑鼠互動Web
- [WebGL入門]十,矩陣計算和外部庫Web矩陣
- [WebGL入門]九,頂點快取的基礎Web快取
- [WebGL入門]五,矩陣的基礎知識Web矩陣
- golang快速入門(四)Golang
- CSS快速入門(四)CSS