WebGL-Demo

夜還不夠黑丶發表於2019-05-17

目錄

  • 前言
  • OpenGL
  • WebGL
  • Three.js
  • 輸出一個DEMO
  • GitHub
  • END

前言

最近拖更蠻嚴重,因為對自己的要求高了一大截。

最近玩了個Three.js的Demo,也算了解了一波前端的動畫方面的延伸,因為我公司主要業務為大資料,學了很多資料層的東西,動畫方面沒什麼用武之地,但是我是喜歡動畫效果的,哎,有沒有種逼良為娼的感覺。

OpenGL

想入門WebGL的時候就查了很多文章,以前學c++的時候接觸過一點OpenGL,查了一下兩者的聯絡。有個圖很形象。

WebGL-Demo
(圖出自:www.cnblogs.com/mirror-pc/p…

WebGL 1.0 基於OpenGL ES 2.0(OpenGL ES是針對移動裝置的OpenGL)。
複製程式碼

為什麼是基於2.0呢?

因為OpenGL2.0之前沒有著色器。從2.0之後開始才支援了這個非常重要的特性,“可程式設計著色器方法”。有沒有顏色還是很重要的。

那麼OpenGL是什麼呢。OpenGL並不是一個API或者SDK,而是一組規範,Khronos Group團隊維護這個規範(我也不知道是啥團隊)。

這組規範定義了一組函式,這組函式傳入的是什麼引數,傳出的是什麼結果。由於只是這樣的一組規範,所以只要合乎規範,誰都能以不同的方式實現函式。

瞭解到此感覺已經可以了。

WebGL

WebGL是大部分瀏覽器直接支援的一種3D繪圖示準
複製程式碼

Google在這個網站上webglsamples.org/釋出了一些WebGL做出的樣品。

WebGL-Demo

炫酷到讓人心動,老司機已經感覺到這個東西沒那麼好學了。

Three.js

如果直接使用WebGL進行開發的話,十分吃力,然而這個Three.js 已經火了很多年了,Three.js 是WebGL的一個開源框架。封裝了很多api,使用方便,節省我們的開發細節。

所以我打算通過Three.js 輸出一片Demo來熟悉3D的Javascript.

Start

首先我們先搭建一個本地服務。

WebGL-Demo

根目錄下建立index.js服務啟動檔案,和一個專案資料夾www

WebGL-Demo

然後我們開始寫業務檔案

WebGL-Demo

想象螢幕裡就是個小世界,你就是上帝,你先構建了個空間。

WebGL-Demo

建立相機,就是你看小世界的角度

  • PerspectiveCamera(fov, aspect, near, far)
  • Fov – 相機的視錐體的垂直視野角
  • Aspect – 相機視錐體的長寬比
  • Near – 相機視錐體的近平面
  • Far – 相機視錐體的遠平面

WebGL-Demo

渲染器決定了渲染的結果應該畫在元素的什麼元素上面,並且以怎樣的方式來繪製。

WebGL-Demo

就是個單純的座標軸3緯長度為200

WebGL-Demo

建立地板,設定紋理引數。這裡我選擇了以一張grond草坪樣式的紋理貼紙。

我們還需要設定一下地板的大小及位置

WebGL-Demo

WebGL-Demo

是的,scene.add方法就是將你創造的任何東西放到場景中去。

WebGL-Demo

我們將渲染器插入到頁面中去

WebGL-Demo

開啟渲染,看一下效果.

WebGL-Demo

效果大概就是這個樣子,一片黑,座標軸到是有了

因為我們的材質沒有光,上帝說要有光,對吧,剛才我的草坪哪去了。

WebGL-Demo

再來看一下效果

WebGL-Demo

空蕩蕩的草坪上有個座標系。

這時候我們發現,我們無法移動視角。

WebGL-Demo

WebGL-Demo

孤單的場景,這時候上帝想加入一些東西,後來想想加個立方體也太沒創意了,所以就去查了查加入個3D MAX的模型。

three.js支援計入obj資料模型及mlt貼圖檔案。我就去找了找,好看的模型超級貴,這年頭版權意識都起來了,我也很尊重版權這個東西。所以弄了個沒那麼炫酷的、你們絕對猜不到的。電塔...

話不多說,看一下匯入模型程式碼

WebGL-Demo

看一下效果

WebGL-Demo

看一下動效

WebGL-Demo

有沒有種回到苞米地的感覺。

GitHub

附上GitHub地址:

user-gold-cdn.xitu.io/2019/5/17/1…

END

經過初步瞭解,越發感覺這個東西深不見底,一切皆有可能。如果條件允許的話,我十分願意在WebGL的海洋裡肆意遨遊。尤其是本人特別喜歡動畫效果。

emmm,不要催我的DIV監控平臺下..... 不妥更的作者不是好前端。

我對那篇文章的要求比較高,一直沒構思好,這篇文章有一點是為了頂績效。

先溜了,最近可能是高產母豬,績效要寫8篇。。。。