首先咱們要作的就是把三維的東西展示在顯示器裏(瀏覽器裏),但瀏覽器是二維的。那麼就是把一個三維的物體用數學模型描述出來(x,y,z)而後把這個三維的數學模型轉換
到二維的瀏覽器裏顯示出來。(用webgl來模擬一個三維的空間)。
不管用DirectX仍是OpenGL,最終都須要將三維的情報向二維進行變換。就像剛開始說的那樣,最終的圖像都是由二維顯示器來顯示的。
這時候,座標變換就是必須的了。座標變換大體能夠分爲三種
,將這些方法正確的組合
在一塊兒,最終決定顯示器上的位置。
用身邊的東西舉例說明的話,三維向二維轉換的例子就是照相機。照片和圖像,經過照相機已經所有變爲了二維,最終,輸出成了照片和動畫。程序員
1.模型變換:在OpenGL的處理中雖然通常叫作模型變換,可是在DirectX中被叫作世界變換。
模型變換,是指爲了定義參照物在三維空間的什麼位置而進行的座標變換。和現實的世界不一樣,程序中的三維空間裏定義了世界的中心的基準點,就是原點。從這個原點出發,爲了知道參照物的相對位置,就須要進行必要的座標變換。假設,虛擬的三維空間裏有一個蘋果,那麼爲了表示這個蘋果在什麼位置,就須要進行相應的模型變換了。web
2.視圖變換:定義了鏡頭的實際位置以及鏡頭的方向。拿剛剛舉例的蘋果來講,即便三維空間中有一個蘋果,若是鏡頭的方向不對着蘋果的話,一樣也是看不到這個蘋果的。並且,若是將鏡頭大幅度遠離蘋果,那麼也有可能看不到蘋果了。爲了決定鏡頭的位置和角度所進行的座標變換就叫作視圖變換。瀏覽器
3.投影變換:定義了三維空間的攝影區域。好比,是橫向攝影,仍是縱向攝影,最遠拍攝多遠距離等。
通常的照相機,直接拍攝鏡頭前的全部圖像,最遠拍攝多遠也基本上沒什麼意識。可是,程序是沒法模擬無限大的空間的,因此,從哪裏開始拍攝,拍攝到哪裏,必須有一個明確的範圍。投影變幻,經過遠近法則,能夠將近處的物體描畫的比較大,遠處的物體描畫的比較小。動畫
認識着色器以前得先了解一下什麼是固定渲染管線,簡單來講,固定渲染管線就是就是3d渲染所須要進行的一連串的計算流程。也就是上面所說的模型、視圖、投影的三種變化,固定渲染管線都會替咱們完成。
但webgl中不存在
固定渲染管線,那麼就意味着,座標的變化得由咱們本身來解決了。在webgl中這個解決座標變化的機制就叫着色器(shader)。而這種能夠有程序員來控制的座標變換機制又叫作,可編輯渲染管線機制。着色器又分爲兩種
1.頂點着色器(vertex shader):顧名思義它能處理頂點座標、大小等(矩陣計算後的結果),可以把數學座標光柵化。
2.片元着色器(fragment shader):可以接收光柵化數據並加以處理使其顯示到屏幕上(光柵化數據包含了像素的位置、顏色等信息)webgl
光柵化就是把頂點數據轉換爲片元的過程。片元中的每個元素對應於幀緩衝區中的一個像素。
光柵化實際上是一種將幾何圖元變爲二維圖像的過程。該過程包含了兩部分的工做。第一部分工做:決定窗口座標中的哪些整型柵格區域被基本圖元佔用;第二部分工做:分配一個顏色值和一個深度值到各個區域。光柵化過程產生的是片元。把物體的數學描述以及與物體相關的顏色信息轉換爲屏幕上用於對應位置的像素及用於填充像素的顏色,這個過程稱爲光柵化,這是一個將模擬信號轉化爲離散信號的過程。編碼
着色器的使用:使用GLSL(openGL Shading Laguage)硬編碼的C語言去使用.3d