14 Html5的局 WebGL的紋理格式

2021-09-23 17:31:21 字數 1876 閱讀 4129

webgl作為通用的標準,遮蔽了一些硬體廠商的高階特性,有捨就會有取,那麼在一些比較常用的功能上,如果硬體無法滿足通用,那麼就會通過cpu來彌補硬體的不足。

的紋理格式,就是其中的乙個點。

我們引用12章:webgl跨平台的取與舍的:

這些在opengl平台都是支援的,但在webgl中做了裁剪。

這些格式在firefox中嚴格的不支援,但在webkit中,webkit雖然在**上支援了這些格式,最終是否支援,看各個平台的硬體特性了。

沒想到紋理還有浮點數格式。。

上圖列出的是主要支援的紋理格式和型別,其他型別也可能支援,最好不要使用。

在webgl的使用中,我們會經常使用以下三種紋理引數:

眾所周知,opengl的原點座標在螢幕的左下角,x軸向右,y軸向上,z軸向外。

在os的世界中,座標原點在螢幕左上角,x軸向右,y軸向下,z軸向外。

這樣導致我們使用一張的時候,預設是從左上角為bitmap的起始點。這樣到了opengl的世界,就變成了上下顛倒的,本質就是y軸翻轉導致。

為了提供opengl的效能,我們在cpu中提前把顏色的alpha乘以rgb,opengl在顯示時,無需每次實時技術rgb顏色通道,進一步提公升gpu效能。

紋理畫素的對齊引數,比如上圖中我們提到gl_rgb是3個位元組的長度,如果是3x3大小,那麼資料在記憶體中,以gl_unsigned_byte為單位儲存,大小為:9*9。

在opengles1.0的時代,紋理大小只能是2的整數倍,這樣的在opengl中是無法識別的。就要做轉換:

gl_rgba:轉換後,每個畫素成為4個位元組

alignment:在opengl es2.0以後可以設定unpack_alignment,它表示畫素對齊最小公因子,我們設定為1,告訴gpu只要是1的整數倍即可。(這點會影響gpu的效能,因為gpu也像cpu一樣,喜歡位元組對齊的資料)

看完了webgl的紋理格式,就會發現,很多已經成熟的技術製作的3d模型,如果格式或者型別不匹配,就會導致webgl出現相容性問題,無法顯示,甚至會出現崩潰。

遇到問題的同學,請牢記以上資訊。

看完了這些,感覺很簡單的樣子。仔細看看:

unpack_flip_y_webgl

unpack_premultiply_alpha_webgl

是不是末尾都新增了webgl得標誌?

對的,這些不是opengl的功能,是cpu幫忙我們實現的,如果同學們直接使用opengl開發,那麼就有可能在webgl上不相容。

另外,還記得上一節中我們提到的嗎:

void glteximage2d (glenum target, glint level, glint internalformat, glsizei width, glsizei height, glint border, glenum format, glenum type, const glvoid *pixels);
internalformat和format到底存在什麼關係?如果他們真的必須保持一致,那麼這個介面只需要寫乙個引數就好了,何必要預留兩個入參呢?難道程式設計師腦袋秀逗了?

1 4 HTML5新增的表單屬性

屬性值說明 required required 表單擁有該屬性表示其內容不能為空,必填 placeholder 提示文字 表單的提示資訊,存在預設值將不顯示 修改文字顏色input placeholder autofocus autofocus 自動聚焦屬性,頁面載入完成自動聚焦到指定表單 auto...

基於 HTML5 WebGL 的醫療物流系統

物聯網 iot 簡單的理解就是物體之間通過網際網路進行鏈結。世界上的萬事萬物,都可以通過資料的改變進行智慧型化管理。iot 的興起在醫療行業中具有拯救生命的潛在作用。不斷的收集使用者資訊並且實時的進行診斷,所以未來 iot 肯定在醫療行業的應用會呈覆蓋性。下面是我最近做的乙個醫療物流系統,用來觀察醫...

基於 HTML5 WebGL 的 3D 機房

用 webgl 渲染的 3d 機房現在也不是什麼新鮮事兒了,這篇文章的主要目的是說明一下,3d 機房中的 eye 和 center 的問題,剛好在專案中用上了,好生思考了一番,最終覺得這個例子最符合我的要求,就拿來作為記錄。這個 3d 機房的 demo 做的還不錯,比較美觀,基礎的互動也都滿足,接下...