到目前爲止咱們繪製了很多模型,用到了很多顏色,顏色中有四個份量(RGBA),其中的A份量表示透明度,這個份量目前爲止咱們尚未真正的用到;html
A份量,表示的是當前的透明度,若是設定爲 0.5 就會半透明,能夠看到半透明的模型,也能夠看見模型後面的東西;git
要實現透明,須要開啓混合,會使用到下面的兩個方法:github
// 開啓混合 gl.enable(gl.BLEND); // 設定混合效果 gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
源因子和目標因子是能夠經過gl.blendFunc函數來進行設置的less
gl.blendFunc有兩個參數,前者表示源因子,後者表示目標因子。這兩個參數能夠是多種值,下面介紹比較經常使用的幾種。函數
注意:所謂源顏色和目標顏色,是跟繪製的順序有關的。假如先繪製了一個紅色的物體,再在其上繪製綠色的物體。則綠色是源顏色,紅色是目標顏色。若是順序反過來,則紅色就是源顏色,綠色纔是目標顏色。在繪製時,應該注意順序,使得繪製的源顏色與設置的源因子對應,目標顏色與設置的目標因子對應。測試
核心代碼以下:spa
// 開啓混合 gl.enable(gl.BLEND); // 設定混合模式爲透明模式 gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
示例請點擊:https://hammerc.github.io/dou3d-ts/examples/learningNotes/lesson_12/LookAtBlendedTriangles.html3d
須要注意的是,透明的圖像繪製時,不能開啓深度測試,開啓深度測試,不管是否透明,靠後的顏色都會丟失;code
若是已經開啓了深度測試(用於繪製不透明的圖像),還能夠調用depthMask來臨時開啓和關閉深度測試,調用 gl.depthMask(false); 能夠關閉深度測試;htm
另外,繪製透明立方體時,若是須要顯示背面,就關閉剔除模式,須要不要顯示背面就開啓剔除模式並設定爲剔除背面;
示例請點擊:https://hammerc.github.io/dou3d-ts/examples/learningNotes/lesson_12/BlendedCube.html