摘要:本系列將從最簡單最基礎(chǔ)的原生入手,手把手教你寫準(zhǔn)備上下文同二維場景一樣,我們需要一個畫布來繪制,在中建立一個元素。前三個分量表示三原色的飽和度,最后一個表示不透明度。
準(zhǔn)備webgl上下文來看這篇文章的同學(xué)一定是被近來的3D場景效果所震撼,抱著‘這TM怎么做的!’的來心態(tài)來學(xué)習(xí)webgl的吧。
也行你已經(jīng)有threejs或其他3d場景開發(fā)框架的使用經(jīng)驗,卻不知道webgl原生到底怎么寫。本系列將從最簡單最基礎(chǔ)的原生API入手,手把手教你寫webgl
同二維場景一樣,我們需要一個畫布來繪制,在html中建立一個 canvas 元素。代碼如下:
// index.htmlWebgl Hello world!
start() 函數(shù)將會在文檔加載完成之后被調(diào)用。它的任務(wù)是設(shè)置 WebGL 上下文并開始渲染內(nèi)容。
// index.js function start() { var canvas = document.getElementById("main"); // 初始化 WebGL 上下文 var gl = initWebGL(canvas); // 開始渲染 ...... }
function initWebGL(canvas) { // 創(chuàng)建全局變量 var gl = null; try { // 嘗試獲取標(biāo)準(zhǔn)上下文,如果失敗,回退到試驗性上下文 gl = canvas.getContext("webgl") || canvas.getContext("experimental-webgl"); } catch(e) {} // 如果沒有GL上下文,馬上放棄 if (!gl) { alert("WebGL初始化失敗,可能是因為您的瀏覽器不支持。"); gl = null; } return gl; }
getContext("context 參數(shù)") 返回參數(shù)支持的上下文,如果參數(shù)無效,則返回 null 。我們在畫二維canvas的時候才用的是.getContext("2d"),返回 CanvasRenderingContext2D 對象 ;三維卻并不是想當(dāng)然的"3d"而是canvas.getContext("webgl") 或者 canvas.getContext("experimental-webgl"),返回一個WebGLRenderingContext 對象。不同的瀏覽器內(nèi)核支持的參數(shù)不同,具體如下:
畫過canvas的親應(yīng)該都會使用一個顏色填充來清理幀畫面。webgl同意需要這樣一個清理函數(shù)在繪制下一畫面的時候。webgl才用rgba的四色系統(tǒng)來定義顏色。與我們平時所用的顏色系統(tǒng)不一樣的是,RGBA四個分量使用0.0~0.1之間的數(shù)值來表示。前三個分量表示三原色的飽和度,最后一個表示不透明度。
值得一提的是,webgl計算都是才用浮點計算,所以數(shù)值一般1寫為1.0,數(shù)值 0 寫為 0.0
這里我們需要進(jìn)行四個初始化步驟
設(shè)置清除顏色(藍(lán)色,不透明)
gl.clearColor(0.0, 1.0, 1.0, 1.0);
深度清理
gl.clearDepth(1.0);
開啟“深度測試”, Z-緩存
gl.enable(gl.DEPTH_TEST);
設(shè)置深度測試,近的物體遮擋遠(yuǎn)的物體
gl.depthFunc(gl.LEQUAL);
清理畫布的時候調(diào)用 gl.clear(gl.COLOR_BUFFER_BIT);來清理畫布。
這樣我們便準(zhǔn)好了一個webgl的畫布可以開始繪圖了。
demo地址:http://codepen.io/leanneCC/pe...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/50665.html
摘要:學(xué)習(xí)基礎(chǔ)具備基本和著色器語言知識,不一定要深入學(xué)習(xí)。著色器所謂的材質(zhì)對象本質(zhì)上就是著色器代碼和需要傳遞的數(shù)據(jù)光源顏色矩陣。比更方便些,著色器中的很多變量不用聲明,系統(tǒng)會自動幫你設(shè)置,比如頂點坐標(biāo)變量投影矩陣視圖矩陣 Three.js著色器 很多時候如果想寫一些特效,往往需要編寫著色器代碼GLSL,如果你不熟悉著色器語言,自然需要學(xué)習(xí)著色器語言語法,如果你有著色器語言基礎(chǔ),直接使用Thr...
摘要:在文末,我會附上一個可加載的模型方便學(xué)習(xí)中文藝術(shù)字渲染用原生可以很容易地繪制文字,但是原生提供的文字效果美化功能十分有限。 showImg(https://segmentfault.com/img/bVWYnb?w=900&h=385); WebGL 可以說是 HTML5 技術(shù)生態(tài)鏈中最為令人振奮的標(biāo)準(zhǔn)之一,它把 Web 帶入了 3D 的時代。 初識 WebGL 先通過幾個使用 Web...
摘要:注意在代碼中將其替換為自己剛剛申請的運行,顯示地圖修改保存之后點擊運行就可以得到一幅矢量地圖了,此過程可能會稍微有點長,要耐心多等一會兒。 VectorMap.js是一個開源地圖渲染JavaScript庫, 可以使用WebGL或者HTML5兩種方式進(jìn)行交互式矢量地圖 (包括矢量瓦片地圖,一般性矢量數(shù)據(jù)地圖)和 柵格瓦片地圖的渲染。 WebGL渲染意味著高性能,大數(shù)據(jù), HTML5渲染意...
摘要:而是一款框架,由于其易用性被廣泛應(yīng)用。如果要學(xué)習(xí),拋棄那些復(fù)雜的原生接口從這款框架入手是一個不錯的選擇。需要相機(jī),演員這里是地球,場景,導(dǎo)演。最后拍好了戲交給渲染器來制片,發(fā)布。狀態(tài)也在不停的更新。 WebGL入門demo three.js入門 開場白 哇哦,繪制氣球耶,在網(wǎng)頁上?對啊!厲害了!3D效果圖也能在網(wǎng)頁上繪制出來啊,這么好玩的事情,趕緊來看看! 這里是屬于WebGL的應(yīng)用,...
閱讀 2308·2021-11-24 09:39
閱讀 3038·2021-10-15 09:39
閱讀 3088·2021-07-26 23:38
閱讀 2288·2019-08-30 11:14
閱讀 3409·2019-08-29 16:39
閱讀 1713·2019-08-29 15:23
閱讀 778·2019-08-29 13:01
閱讀 2663·2019-08-29 12:29